Написала программу, которая будет спрашивать первое число N, потом пользователь будет вводить N количество num, и уже потом программа будет сравнивать числа(num) и определять максимальное. Подскажите как правильно задать число N, чтобы оно было больше 0. С положительными числами программа работает, но если ввести 0 или негативное число, то естественно, выдает ошибку.
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(reader.readLine());
int maximum = Integer.parseInt(reader.readLine());
int num;
for(int i=0; i<N-1; i++) {
num = Integer.parseInt(reader.readLine());
if (num >= maximum) {
maximum = num;
}
}
System.out.println(maximum);
//напишите тут ваш код
}
}
Viktoriia Chaney
7 уровень
Помогите разобраться
Решен
Комментарии (5)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Pavel KurashovExpert
11 апреля 2020, 02:58
по условиям задачи N больше нуля, поэтому беспокоится нечего.
Но с другой стороны у тебя цикл for(int i=0; i<N-1; i++) уже ограничен по N, поэтому если N будет 0 или меньше, то он просто ни разу не выполнится. Осталось толь убрать считывание первого значения сразу в цикл - вдруг и его не будет совсем. А maximum нужно инициализировать чем-нибудь очень маленьким, меньше нуля, намного меньше... прям вот так - Integer.MIN_VALUE
0
Viktoriia Chaney
11 апреля 2020, 03:16
Я попробовала изменить начало на
while(true){
int N = Integer.parseInt(reader.readLine());
if (N <= 0)
break;
}
чтобы проверить, что N больше и не равняется 0. Программа выдала ошибку.
0
Andrey VakhutkoQA Automation Engineer в СберТех
11 апреля 2020, 10:52решение
Убери while(true) и ифом оберни весь код ниже, но условие в if поменяй согласно задаче
+2
Pavel KurashovExpert
11 апреля 2020, 15:16
В цикле for () уже есть встроенный if, который проверяет значение N в твоём случае.
for(int i=0; i<N; i++) если N будет 0 или отрицательное, то цикл просто ни разу не выполнится, собственно в этом и задача проверки.
Внутрь цикла нужно поместить считывание всего количества значений N, даже того самого первого которым инициалируется текущий максимум. Текущий максимум по классике инициализируют константой Integer.MIN_VALUE.
0
Pavel KurashovExpert
11 апреля 2020, 15:24
Обрати внимание на следующие момнеты:
- цикл for работает от 0 до N не включая (строго меньше).
- все считивания количества N в переменную num происходят в цикле
- сам переменная int num объявляется внутри цикла - она больше нигде не нужна.
- num проверяется на строго больше чем maximum - зачем выполнять присваивание если они и так равны
в результате получился простой и понятный код.
P.S. надеюсь мои объяснения не сильно утомительны 😜
0