Вводите числа и сохраняйте в arrayList пока не введем 0. Найдите только отрицательные числа и найдите максимальное среди них

Рейтинг: -1Ответов: 1Опубликовано: 07.02.2023

Ввод:
-4 -9 -10 -7 9 5 6 0
Вывод:
-4 -9 -10 -7
The max is -4

    Scanner in = new Scanner(System.in);
    int n = 0;
    int max = -200;
    ArrayList<Integer> numbers = new ArrayList<>();
    numbers.add(in.nextInt());
    while (numbers.get(n) != 0) {
        n++;
        numbers.add(in.nextInt());
    }
    for (int i = 0; i < n; i++) {
        if (numbers.get(i) < 0 && numbers.get(i)>max) {
            max=numbers.get(i);
            System.out.print(numbers.get(i) + " ");
            System.out.println("The max is "+max);
        }
    }

Ответы

▲ 1

Основная проблема представленного кода в том, что максимальное значение выводится каждый раз в цикле, тогда как его вывод должен быть вынесен вне цикла. Выбор числа -200 может быть оправдан, но лучше всё же взять либо Integer.MIN_VALUE, либо вообще null, который не изменится для пустого входного списка.

Также можно улучшить ввод элементов и использовать цикл foreach для более лаконичного кода.

Например, если число-делимитер 0 тоже должно быть включено в список, лучше использовать do-while:

Scanner in = new Scanner(System.in);
Integer max = null;
List<Integer> numbers = new ArrayList<>();
// ввод и поиск максимума среди отрицательных чисел
int n;
do {
    numbers.add(n = in.nextInt());
    if (n < 0 && (max == null || max < n)) {
        max = n;
    }
} while (n != 0);

// вывод
for (int num : numbers) {
    if (num < 0) {
        System.out.print(num);
        System.out.print("  ");
    }
}
System.out.println("\nThe max is: " + max);

Если ввод выполняется, пока 0 не появится во входном потоке, можно использовать while цикл:

Scanner in = new Scanner(System.in);
Integer max = null;
List<Integer> numbers = new ArrayList<>();
int n;
while (n = in.nextInt()) {
    numbers.add(n);
    if (n < 0 && (max == null || max < n)) {
        max = n;
    }
}