Всем привет! Подскажите, пожалуйста, почему через цикл while программа берет в расчёт -1? Насколько я понимаю, операции в цикле выполняются (в моём случае) только пока введенное мною число не будет равно -1. Если оно = -1, то прога должна выйти из цикла, высчитать среднее арифметическое и вывести его на экран. Я что-то не так понимаю?
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int sum = 0;
int a = 0;
int num = 0;
while (num != -1) {
num = Integer.parseInt(br.readLine());
a++;
sum += num;
}
double mean = (double) sum / a;
System.out.println(mean);
Yahor Labanau
10 уровень
Через while
Решен
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
hidden #2244663Expert
15 марта 2020, 15:15решение
Правильно понимаете, из цикла вы выйдете, это да. Но sum += num; ведь все равно выполнится!
Все, что у вас внутри цикла, прекрасно отработает при вводе -1, только потом цикл вернется к началу и будет проверено условие (num != -1)
Вам надо или внутри тела цикла прописывать проверку на -1 и выход из цикла оператором break например (и тогда цикл можно сделать бесконечным),
или же совместить ввод числа и проверку условия цикла, вроде такого
+4
Yahor Labanau
15 марта 2020, 17:00
Большое вам спасибо! Через проверку на -1 с помощью if-a я сразу и решил задачу (как в примере), потом стало интересно, можно ли только while-ом справиться. Оказывается, можно! Спасибо за ваш пример! Желаю удачи в дальнейшем изучении! :)
0
hidden #2244663Expert
15 марта 2020, 17:20
Есть еще вариант, но он очень корявый. Если вы точно знаете, что по -1 у вас выход и эти -1 прибавляются к sum внутри цикла, то можно просто после цикла отнять -1. Но это, очевидно, костыль.
Зато в коде
мы получим ответ NaN, если сразу ввести -1. Цикл ни разу не выполнится, и а останется равна 0.
А в других языках вообще легко поймаем ошибку деления на 0.
Так что тут еще есть над чем подумать.
И переполнить sum тоже легко, достаточно ввести несколько действительно больших int. Причем такую ошибку отловить будет очень сложно, ибо джава на переполнение никак не ругается.
+3