мне интересно на счёт верного решения от разработчиков.
что будет если я введу сразу -1?
по идее должно поделиль 0 на 0. разве такая программа должна пройти проверку?
при этом мое решение не проходит проверку:
package com.javarush.task.task05.task0507;
import java.io.BufferedReader;
import java.io.InputStreamReader;
/*
Среднее арифметическое
*/
public class Solution {
public static void main(String[] args) throws Exception {
int sum = 0;
int count = 0;
double out;
while (true) {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
int number = Integer.parseInt(bufferedReader.readLine());
if (number == -1) {
break;
}
else {
count++;
sum += number;
}
}
out = sum/count;
System.out.println(out);
}
}
Alex Kazan
8 уровень
почему мой код не работает, а код разработчиков верный, хотя на ноль делить нельзя?
Обсуждается
Комментарии (3)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Михаил
2 ноября 2022, 07:04
Ты прав. Делить на ноль нельзя. При вводе -1 выкинет java.lang.ArithmeticException: / by zero
В программировании ошибки неприятно, но их встреча ожидаема и их надо обрабатывать.
В данном случае не доделана программа.
0
Alex Kazan
2 ноября 2022, 11:04
а на счет моего кода скажете что нибудь? прошу прощения, не научился вставлять правильно блок кода
0
Михаил
2 ноября 2022, 15:50
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
это ресурс системы. Считается что любое обращение к ресурсу дорого. Ты на каждой итерации цикла создаешь новое обращение. Это неправильно. Надо один раз открыть и пользоваться потом. То есть bufferedReader до while (true) { вынести.
Для упрощения восприятия, то что будет делать в цикле лучше в начало вынести.
То как я переделал, не последняя инстанция, просто один из вариантов.
Тут еще нет обработки ошибки если не число а строку или дабл введут. Но уже хотя бы на ноль делить не будет :)
+2