package com.javarush.task.task05.task0507;
import java.io.*;
/*
Среднее арифметическое
*/
public class Solution {
public static void main(String[] args) throws Exception {
//напишите тут ваш код
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
int a = 0;
double res = 0;
double sum = 0;
int i = 1;
for (i = 1; a != -1; i++) {
a = Integer.parseInt(buf.readLine());
sum += a;
// res = (sum+1)/i;
}
res = (sum+1) / (i - 2);
System.out.println(res);
}
}
Igor Kotljar
14 уровень
Прошу распишите каждое действия начиная res.. почему мы делим и от i - 2?
Решен
Комментарии (9)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Ярослав Java Developer Master
22 февраля 2019, 19:51
Комментарии кода скинули уже внизу, но скажу так, это ужасный код :)
0
RiccioMaster
22 февраля 2019, 20:14
Ярослав, товарищ просит помощи - хочет разобраться и понять. Так что вы уж дайте развернутый ответ - что не так и как надо было сделать.
0
Ярослав Java Developer Master
22 февраля 2019, 22:09
1) Имена переменных - ужас. Какие ещё а, res? Вот не читайте код сейчас, прочитайте только названия переменных, которые я назвал тут, и скажите: вы сможете сказать хотя бы приблизительно их значение? Я вот не могу.
2) Если sum - double число, почему мы суммируем только целые числа? Только или sum нужно сделать int типом, или использовать Double.parseDouble()
3) Использование цикла for - ужасно, и обусловлено только кривой реализацией счетчика. Вынесите переменную отдельную int count = 1;, потом используйте цикл while (a != -1) { ...; count++ }
4) Особое дополнение к первому пункту: зачем переменная res? Одно дело, если она может каким-то образом конкретизировать то, что мы хотим вывести, как результат, однако res - даже не сразу можно понять, что это значит result, поленились добавить три лишние буквы?
И непонятно сразу, что за результат. Эта переменная не имеет смысла и можно было спокойно писать выражение прямо в System.out.println.
Единственное, как можно было бы воспользоваться отдельной переменной для результата, это если дать ей нормальное имя: double average = ...;
Тогда понятно, что это среднее арифметическое, у этого имени есть смысл.
5) Зачем все переменные пихать прямо в начало метода? Это нормально в каком-то там Javascript, C, однако во втором это связано с отсутствием ООП, а в первом с какими-то привычками. В Java имеет смысл объявлять переменные тогда, когда они нужны, а не в начале метода на весь метод вперёд.
Потому переменную double average = ...; следовало бы разместить прямо в конце метода перед выводом. Или вообще не размещать.
+2
Сергеев ВикторMaster
23 февраля 2019, 12:57
с большинством согласен, но стоит учитывать уровень спрашивающего. Пока человеку важно решить задачу а не написать красивый код.
Ну а если уж придираться, то что это за переменная average средняя чего? Средняя температура по больнице? средняя площадь космоса на 1 человека?
res - ну тут у каждого свое восприятие, но что ещё можно понять по res. Ресурсы, рестрикция, реструктуризация. Я чаще всего воспринимаю res как result автоматом. Не правильно конечно, но совсем не критично. На этом уровне люди чаще всего использую 1 буквенные переменные, а тут уже есть смысл в именах.
"Если sum - double число, почему мы суммируем только целые числа?" - например, чтобы потом не приводить к дробному, при вычислении среднего. По сути решение правильное
- 4) Особое дополнение к первому пункту: зачем переменная res? Одно дело, если она может каким-то образом конкретизировать то, что мы хотим вывести, как результат, однако res - даже не сразу можно понять, что это значит result, поленились добавить три лишние буквы?
Все таки всегда стоит различать "я не могу понять" и "никто не может понять". Опять же на мой взгляд отделить вычисления от вывода - вполне логично и практично при дебаге, чем делать это сразу в выводе.
С остальным согласен )
0
Ярослав Java Developer Master
23 февраля 2019, 15:46
В числовых стримах как раз есть метод average(), который возвращает среднее значение :)
Про то, что для того, чтобы не приводить, в принципе согласен.
Для меня res не сразу был очевиден, как result. Только когда досмотрел код до вывода значения.
И я не говорил, что автор ужасно пишет, и я даже не уверен, что код автора, учитывая то, что он пришел сюда с вопросом "ребята, а как это работает"? XD
В принципе, для этого уровня - это нормально, все с этого начинали :))
0
Igor Kotljar
23 февраля 2019, 21:03
К сожалению мои попытки кода сошлись к 0, взял этот и разбирал, и после упомянутой выше функции не понял что дальше)
0
RiccioMaster
22 февраля 2019, 19:49полезный
+2
Igor Kotljar
22 февраля 2019, 20:17
Спасибо, очень помогло! Скажите, это нормально что 30% информации, кода остаётся не понятным и становится ясным когда код написан или часть кода взята у других ребят?
0
RiccioMaster
22 февраля 2019, 20:22
По логике, после прочтения условия у вас в голове должно быть несколько путей решения. Но если задача после новой темы и вы не знаете что делать - значит, информации недостаточно. Гуглите.
0