2016-10-23 6 views
1

Я создаю программу, которая определяет наибольшее и наименьшее число, это серия чисел, введенных пользователем. Я создал несколько тестов для моего кода, и все они работают, но это не самый простой тестовый пример. Когда пользователь вводит один номер. Например, если пользователь устанавливает конечное значение равным 25, затем вводит -1 и, наконец, вводит завершение значения, выход должен быть . Максимальное: -1 и наименьшее: -1. Тем не менее, мой код будет выводить наибольшее: 0 и наименьшее: -1 - почему это происходит (потому что я инициализировал максимальное значение равным 0 перед запуском цикла), но как я могу это исправить?Как пройти этот тестовый пример?

Вот мой код ...

Scanner scan = new Scanner(System.in); 

    // Declaration variables 
    double min; 
    double max = 0; 

    System.out.println("Enter terminating number: "); 
    double terminator = scan.nextDouble(); 

    System.out.println("Enter a number: "); 
    double num = scan.nextDouble(); 
    min = num; 

    if (num == terminator) { 
     System.out.println("There must be one number in the list."); 
     // break; 
    } else { 
     while (num != terminator) { 
      System.out.println(""); 
      num = scan.nextDouble(); 

      if ((num < min) && (num != terminator)) { 
       double temp = min; 
       min = num; 
       max = temp; 
      } else if ((num > min) && (num != terminator)) { 
       max = num; 
      } else { 
       max = min; 
      } 
     } 
     System.out.println("Largest: " + max); 
     System.out.println("Smallest: " + min); 
    } 
+0

'max' должно быть' Double.MIN_VALUE' ... и 'min = Double.MAX_VALUE' – Charles

+0

Инициализировать max до очень небольшого числа, т.е.' Double.MIN_VALUE', и минимально до очень большого числа, т.е. 'Double.MAX_VALUE ' –

+0

@ c650 Я думаю, что вы имели в виду полную противоположность - max должен быть' Double.MIN_VALUE', а min должен быть 'Double.MAX_VALUE' –

ответ

1

Вместо инициализации max = 0, сделать max = num так же, как вы уже делаете с min.

Непонятно, почему вы инициализируете max иначе, чем min; когда введено одно число, это как минимум, так и максимум. Прямо сейчас, единственный код, который изменяет max, находится внутри цикла, который считывает числа за пределами первого, поэтому первое число не влияет на него.

+0

Хорошо, что это тонна смысла. Кроме того, это не влияет на другие случаи тестов, когда пользователь вводит несколько номеров. Благодаря! – Construct0r

+0

У вас есть ошибки, влияющие на другие последовательности чисел, BTW: попробуйте 2, 1, 1 и 2, 1, 0, 1 в качестве тестовых примеров. И обратите внимание, что ваша логика if/else назначает новое значение 'max' во всех случаях, но никогда не проверяет, действительно ли' num> max'. – Wyzard

+0

Я добавил (num> max) в оператор else if. – Construct0r

Смежные вопросы