Repository navigation
Conversation
| /* | ||
| Возвращает строку, описываюющую правильное окончание в слове "рубль" в зависимости от целочисленной части. | ||
| */ | ||
| public static String getTextRub(double total, int amount) { |
There was a problem hiding this comment.
Лучше передать в функцию конкретное число, для которого нужно сформировать корректное окончание, а не total и amount. Таким образом, функция станет универсальнее и её будет удобнее тестировать
| */ | ||
| public static String getTextRub(double total, int amount) { | ||
| String textRub; | ||
| int rubles = (int) total / amount; |
There was a problem hiding this comment.
Здесь потенциально может быть деление на 0, перед делением всегда нужно проверять второй аргумент
| */ | ||
| public static void main(String[] args) { | ||
| System.out.println("Hello world!"); | ||
| byte amount = getValidAmount(); |
There was a problem hiding this comment.
А почему именно byte, а не int? По требованиям нет верхнего ограничения, а ты сделал его - 127 человек, так лучше не делать
| byte amount; | ||
|
|
||
| while (true) { | ||
| Scanner s = new Scanner(System.in); |
There was a problem hiding this comment.
Лучше создать один экземпляр сканнера на весь класс, чтобы в каждой функции не создавать свой сканнер
There was a problem hiding this comment.
Я это сделал для обхода enter для nextLine, иначе получается, что мне нужно считывать enter перед вводом названия товара второй и последующие разы.
There was a problem hiding this comment.
А что в этом плохого? Сейчас всё ещё хуже - каждый раз конструируется новый объект, что является дорогой операцией
There was a problem hiding this comment.
В методе getValidAmount я могу вывести scanner за пределы цикла, но в методе addProducts я не могу этого сделать, потому что я считываю название товара через nextLine, потом считываю хочет ли пользователь продолжить добавлять товары, и после того как пользователь вводит любой символ и нажимает enter, этот самый enter (\n) передается для сканнера nextLine и он его считывает как название товара, после чего сразу запрашивается стоимость товара, чтобы этого избежать, пришлось написать так, я не нашел другого способа как этого можно избежать в scanner
There was a problem hiding this comment.
В целом хотя бы из цикла вынести создание сканнера - уже хорошо. Потому что создание объекта не дешёвая операция, а внутри конструктора сканнера ещё и заново открывается входной поток
| /* | ||
| Предоставляет информацию о товаре. | ||
| */ | ||
| public static class Calculate { |
| double price; | ||
| String productName; |
There was a problem hiding this comment.
Эти поля лучше сделать приватными и пользоваться функциями сеттерами и геттерами
| Calculate product = new Calculate(productName, price); | ||
| products.append(productName).append("\n"); | ||
| total += product.getPrice(); | ||
| System.out.println("Товар успешно добавлен.\nХотите добавить ещё один товар?"); |
There was a problem hiding this comment.
Здесь лучше вывести, что ожидается от пользователя в вводе. Написать, что нужно ввести "завершить", если пользователь хочет получить результат подсчета
…классе Product 3. добавил описание для пользователя чтобы завершить программу 4. изменил тип данных с byte на int для переменной amount по кол-ву людей для разделения счета 5. добавил условие для вывода окончания в слове рубль 6. изменил входные данные в методе getTextRub
…классе Product 3. добавил описание для пользователя чтобы завершить программу 4. изменил тип данных с byte на int для переменной amount по кол-ву людей для разделения счета 5. добавил условие для вывода окончания в слове рубль 6. изменил входные данные в методе getTextRub