2016-02-14 3 views
0

Используя цикл while, я должен сделать следующее:
Использовать переменную «i», которая подсчитывает, сколько целых чисел было введено, переменная «number», который выплескивает введенный номер, переменную «мин», которая указывает наименьшее число, введенное до сих пор, и переменную «макс», которая указывает наибольшее число, введенное до сих пор.
Пользователь введет в общей сложности 5 целых чисел.java- найти минимум/максимум во введенном наборе чисел

Это мой код:

import java.util.Scanner; 

public class MinMax 
{ 
    public static void main(String[] args) 
    { 
    int i = 1; 

    while (i <= 5) 
    { 
    int smallest = 0; 
    int largest = 0; 

    System.out.println("Enter number: "); 
    Scanner input = new Scanner(System.in); 
    int number = input.nextInt(); 

    System.out.println("Amount of numbers entered: " + i); 

    System.out.println("Number entered: " + number); 

    if (number < min) 
    { 
     min = number; 
    } 
    System.out.println("Smallest # so far: " + min); 

    if (number > max) 
    { 
     max = number; 
    } 
    System.out.println("Largest # so far: " + max); 


    i++; 

    } 
} 
} 

Когда я запускаю это, «я», «номер» и «максимум» переменные все, кажется, работают должным образом. Однако «минимальная» переменная имеет в виду, что установленное число «минимум» равно 0. Есть ли способ исправить это, так что если я введу число 10 для первого числа и число 2 для второго числа, код выплюнет «2» как минимум вместо «0»?

Спасибо!

ответ

1

Изменить код

int smallest = Integer.MAX_VALUE; 
int largest = Integer.MIN_VALUE; 

Итак, когда вы ищете наименьшее число, оно будет сравнивать максимальное целое значение с текущим элементом - который, безусловно, меньше или равно. Такой маленький будет либо правильным, либо он будет обновлен. Аналогично для максимума.

И, кстати, эти два должны быть объявлены вне цикла.

1

Во-первых, вам необходимо переместить min и max переменных из цикла.

Тогда вы должны исправить в классическую ошибку в реализации в min/max: вы должны либо

  • Начало min в Integer.MAX_VALUE и max в Integer.MIN_VALUE или
  • Start и min и max на первом введенное значение.

Я предпочитаю второй подход, поскольку он сохраняет явную инициализацию из кода:

int min = 0, max = 0, i = 0; 
while (i < 5) { 
    System.out.println("Enter number: "+(i+1)); 
    Scanner input = new Scanner(System.in); 
    if (i == 0) { 
     min = max = input; 
    } else { 
     ... // Do the conditions to determine if input is a new min or a max 
    } 
}