Найдите максимальное и минимальное значение, используя цикл for

Я пытаюсь взять 10 целых чисел из пользовательского ввода и найти минимум и максимум, используя цикл for. Но мой последний оператор печати просто распечатывает список введенных чисел. Я потерялся.

public static void main(String[]args) {

   Scanner scan=new Scanner(System.in);
   double a = 0;
   double max = 0;
   double min = 0;

   System.out.print("Enter ten floating points: \n");

   for(a=0; a <10; a++) {
      a=scan.nextDouble();

       if(a == 0) { 
           min=a;
           max=a; 
       } 
       else if(a < min) {
           min=a; 
       }
       else if (a > max){ 
           max=a; 
       }
   }
   System.out.println("Minimum value: " +min);
   System.out.println("Maximum value: " +max);
}

Вы просто сохраняете каждое число в одной и той же переменной, известной как «а».

yassadi 11.04.2018 13:46

использование a как переменной для сохранения введенного числа, а также для управления циклом for - не очень хорошая идея (или, проще говоря: это не сработает). Тем более, что таким образом ваш цикл не будет запускаться 10 раз, но пока пользователь не введет число> = 10.

OH GOD SPIDERS 11.04.2018 13:49

Большое спасибо! Мне удалось это решить!

Hann 11.04.2018 13:58
0
3
6 837
3

Ответы 3

Проблема в вашем цикле for, измените его на

for (int x = 0; x < 10; x++) {

есть еще одна проблема, нужно поменять

if(a == 0){

К

if (x == 0) {

Большое спасибо! Мне удалось решить это прямо сейчас. Спасибо!

Hann 11.04.2018 13:58

Во-первых, ваш код не должен работать правильно, поскольку вы используете ту же переменную a как счетчик и как переменную для хранения пользовательского ввода. Вы должны использовать две разные переменные.

Во-вторых, объявите вашу переменную, которая хранит ввод от пользователя внутри цикла, иначе она может сохранить значение из предыдущего цикла.

В-третьих, ваше состояние if(a == 0) сбрасывает min и max, когда пользователь вводит число 0. А это не то, что вам нужно.

Наконец, вы не должны так инициализировать max / min. Определив min как 0, если пользователь вводит только положительное число, min будет 0, но пользователь никогда не вводил 0. Вместо этого вы инициализируете их при первой записи от пользователя.

Это должно выглядеть так:

public static void main(String[]args) {

    Scanner scan=new Scanner(System.in);

    System.out.print("Enter ten floating points: \n");
    double tmp = scan.nextDouble(); //read first number from user

    double max = tmp; //intialize with the first input
    double min = tmp;

    for(int i=0; i <9; i++) { //from 0 to 8, 9 numbers since the first has already been read
        double a = scan.nextDouble(); //at every loop read a number from the input
        if(a < min) {
            min=a;
        }
        //removed else since max and min are independant
        if (a > max) {
            max=a;
        }
    }
    System.out.println("Minimum value: " +min);
    System.out.println("Maximum value: " +max);
}

Прошу прощения за этот глупый вопрос, но почему мы сканируем числа два раза? Так как мы уже использовали его для чтения первого числа, то будем ли мы снова использовать его для сохранения ввода?

Hann 11.04.2018 14:25

Если быть точным, мы просканируем числа 10 раз. В моем примере я делаю это один раз вне цикла, чтобы прочитать первое число. Потому что первое число - это особый случай, мы используем его для инициализации min и max. Затем в каждом цикле нам нужно прочитать новое число от пользователя, чтобы сравнить его с минимальным и максимальным. Это 9 раз. Итак, в конце мы прочитали 10 чисел и получили минимальное и максимальное из этих 10 чисел.

vincrichaud 11.04.2018 14:47

@NorSaffia Это то, что вы уже сделали в своем коде. Поскольку scan.nextDouble был в вашем цикле for, вы сканируете 10 раз. Получить 10 номеров. Вы пишете его только один раз, потому что решили управлять конкретным случаем первого числа в цикле, используя if (if a == 0). Я решил вести это дело вне цикла. Это ничего не меняет в результате, это просто выбор дизайна

vincrichaud 11.04.2018 14:49

Попробуй это

    Scanner scan=new Scanner(System.in);
    int maximum = Integer.MIN_VALUE;
    int minimum = Integer.MAX_VALUE;
    for( int i=0; i<10 &&  scan.hasNextInt(); i++ ) {
        int next = scan.nextInt();
        maximum = Math.max( next, maximum);
        minimum = Math.min( next, minimum);
    }
    System.out.println("Found maximum :"+maximum+", minimum:"+minimum);
    scan.close();

Сначала создаем сканер. Затем мы устанавливаем значение вашего максимума - поскольку целые числа могут быть отрицательными, мы не можем использовать 0, но должны использовать наименьшее возможное целое число. То же самое за минимум.

В цикле for мы должны убедиться, что завершаем цикл после 10 итераций или если во входном потоке больше нет int.

Затем мы используем математическую функцию max, чтобы узнать, какое число является наибольшим - ранее найденный максимум или следующее целое число от сканера. И то же самое за минимум.

Наконец, не забудьте закрыть сканер, чтобы избежать утечки ресурсов.

Другие вопросы по теме