Вводите числа и сохраняйте в arrayList пока не введем 0. Найдите только отрицательные числа и найдите максимальное среди них
Ввод:
-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 шт):
Автор решения: Nowhere Man
→ Ссылка
Основная проблема представленного кода в том, что максимальное значение выводится каждый раз в цикле, тогда как его вывод должен быть вынесен вне цикла. Выбор числа -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;
}
}