Почему первое введенное значение не учитывается? - PullRequest
0 голосов
/ 27 марта 2020

Если первое введенное число является максимумом или минимумом всех введенных чисел, программа не примет это значение как минимум или максимум. Что я делаю не так?

    Scanner in = new Scanner(System.in);
    System.out.println("Please enter a set of integers: ");
    System.out.println("When done entering, enter a non integer (e.g. a floating-point number or string).");


    int smallest = in.nextInt();
    int largest = in.nextInt();

    while (in.hasNextDouble()) {
        int input = in.nextInt();
        if (input > largest) {
            largest = input;
        }
        else {  
        }
        if (input < smallest) { //doesn't include first input?
            smallest = input;
        }   
        else {  
        }
    }

    System.out.println("Maximum: " + largest);
    System.out.print("Minimum: " + smallest);
    in.close();
}

}

Ответы [ 3 ]

0 голосов
/ 27 марта 2020

Вы запрашиваете у сканера «hasNextDouble», а затем пытаетесь извлечь int (nextInt), который всегда будет выбрасывать. Вот быстрое решение (все еще без проверки первых двух входов ...)

Scanner in = new Scanner(System.in);
System.out.println("Please enter a set of integers: ");
System.out.println("When done entering, enter a non integer (e.g. a floating-point number or string).");


int smallest = in.nextInt();
int largest = in.nextInt();
if (smallest > largest) {
    int tmp = smallest;
    smallest = largest;
    largest = tmp;
}

while (in.hasNext()) {
    if (in.hasNextInt()) {
        int input = in.nextInt();
        if (input > largest) {
            largest = input;
        } else if (input < smallest) {
            smallest = input;
        }
    }
    if (in.hasNextDouble()) {
        break;
    }
}

System.out.println("Maximum: " + largest);
System.out.println("Minimum: " + smallest);
in.close();
0 голосов
/ 27 марта 2020

Я немного оптимизировал ваш код. Вы проверяли для nextDouble, но у вас был включен l oop go, если он оценивается как true и причина, по которой программа останавливается, заключается в том, что выдается исключение. Кроме того, в вашей системе вы говорите, что это может быть и строка. Вы также решили, что первый вход будет самым маленьким, а второй - самым большим. Это может привести к интересным проблемам (если я введу 10, 1, 5.5 в таком порядке, он скажет мне, что самое маленькое - 10, а самое большое - 1). В коде, который я написал, все еще не удается ввести целые числа, но вы не указали ожидаемое поведение для этого случая.

Scanner in = new Scanner(System.in);
        System.out.println("Please enter a set of integers: ");
        System.out.println("When done entering, enter a non integer (e.g. a floating-point number or string).");

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

        while (in.hasNextInt()) {
            int input = in.nextInt();
            if (input > largest) {
                largest = input;
            }
            if (input < smallest) {
                smallest = input;
            } 
        }

        System.out.println("Maximum: " + largest);
        System.out.println("Minimum: " + smallest);
        in.close();
0 голосов
/ 27 марта 2020

Я вижу 2 ошибки

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