-
Notifications
You must be signed in to change notification settings - Fork 0
Comments
Conversation
src/main/java/org/example/Main.java
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Есть предложение не вычислять сумму на каждой итерации цикла добавления товара, а производить подсчет только при выводе результатов. Это позволит оптимизировать код программы и избежать лишних вычислений. Также можно будет удалить переменную myTotal.
src/main/java/org/example/Main.java
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
В каждом условии происходит повторяющийся расчет myTotal / allGuests. Давай заранее вычислим это значение и сохраним его в переменной, а затем будем использовать это значение в условиях if-else. Это позволит избежать повторных вычислений одного и того же значения в каждом условии и сделает код более эффективным и читаемым.
src/main/java/org/example/Main.java
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Отлично, что ты организовал логику программы в отдельные классы. Также стоит рассмотреть возможность создания отдельного файла для каждого класса. Это улучшит структуру проекта и облегчит навигацию по коду.
src/main/java/org/example/Main.java
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Вместо использования функции format, которая создает новую отформатированную строку, можно воспользоваться функцией printf, которая позволяет форматировать вывод напрямую при его осуществлении:
String myResult = "Счет на каждого: %.2f рубль %n";
System.out.printf(myResult, myTotal / allGuests);
...ссы по файлам; поправил printf; убрал лишний расчет общей суммы при выводе; обработал пустоту пр ивводе названия товара (по комменту в ревью)
...ссы по файлам; поправил printf; убрал лишний расчет общей суммы при выводе; обработал пустоту при вводе названия товара (по комменту в ревью) + также верное склонение обработал
Alex-Fedd
commented
Apr 14, 2024
Привет! Спасибо большое за ревью и за советы, подсказки. Пришлось еще поломать голову над замечаниями. Мне кажется, что поправил те, что были по первому ревью:
- "Обработка некорректных данных. а) При вводе названия товара пользователь может оставить его пустым или ввести только пробелы; б) При вводе цены товара пользователь может вместо чисел ввести строки, что приведет к падению приложения; в) приложение допускает ввод отрицательной суммы за товар".
- "Вывод слова "рубль" с правильным окончанием (Для корректного определения окончания необходимо учитывать округленное значение цены без дробной части и последнюю цифру)".
Также постарался последовать советам и поправить код по комментариям из ПР.
Надеюсь, что удастся пройти ревью. И буду очень благодарен, если получится еще раз по возможности подсказать, что можно было бы улучшить
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Условие можно раскрыть и переписать следующим образом:
if (scan.hasNextLine() && scan.nextLine().equalsIgnoreCase("Завершить")) {
break;
}
Если первое условие вернет false, то второе не будет проверяться. Таким образом мы убираем лишнюю вложенность.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Отлично, что ты сохранил результат выражения myTotal / allGuests в переменную. Однако, можно также добавить еще одну переменную, чтобы сохранить туда результат округления. Это позволит избежать повторного вычисления выражения Math.floor.
P.S.
Также можно сразу преобразовать переменную в int и сравнивать уже с целочисленными значениями (как ты это сделал для endNumber).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Выражение endNumber <= 9 всегда будет возвращать true, потому что (int) sumResult % 10 может принимать значения от 0 до 9.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ты уверен, что нет такого метода у String?
itemName.isBlank()
Также лучше перед добавлением товара удалять пробелы как раз при помощи trim().
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Лучше сделать переменную закрытой (private), чтобы ограничить доступ к ней только внутри класса и предотвратить ее изменение извне, что способствует лучшей инкапсуляции данных и сокрытию внутренних деталей реализации класса.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Скорее всего проблема с удалением последнего символа.
ПР по 1-й дз. Буду очень благодарен, если получится объяснить ошибки или сложные моменты.