Repository navigation
Conversation
| public void addItem(Item item){ | ||
| System.out.println("Товар " + item.name + " успешно добавлен"); | ||
| itemList.add(item); | ||
| totalPrice += item.price; |
There was a problem hiding this comment.
Предлагаю вычислить общую сумму в цикле внутри метода printTotalInfo:
floar totalPrice = 0
for(Item item: itemList) {
totalPrice += item.price
}
Тогда можно будет удалить лишнюю переменную из класса
| System.out.printf("%d)%s\n",count,item.name); | ||
| count++; |
There was a problem hiding this comment.
Можно инкрементировать переменную прямо внутри вызова printf:
System.out.printf("%d)%s\n", count++, item.name);
| } | ||
|
|
||
| System.out.printf("Общая сумма: %.2f %s\n",totalPrice,new Formatter().getEnding(totalPrice)); | ||
| System.out.printf("Каждый должен заплатить: %.2f %s",(totalPrice/personCount),new Formatter().getEnding(totalPrice/personCount)); |
There was a problem hiding this comment.
Для оптимизации кода и избежания лишних вычислений суммы, которую должен заплатить каждый человек, можно предварительно вычислить это значение и сохранить его в переменной:
float average = totalPrice / personCount;
System.out.printf("Каждый должен заплатить: %.2f %s", average, new Formatter().getEnding(average));
| ArrayList<Item> itemList = new ArrayList<>(); | ||
| public int personCount; | ||
| public float totalPrice; |
There was a problem hiding this comment.
Если свойства класса не используются извне, то их лучше сделать закрытыми (private), чтобы они были недоступны за пределами этого класса. Это помогает соблюсти принцип инкапсуляции и уменьшить сложность интерфейса класса, скрывая детали его реализации от внешнего кода.
| @@ -0,0 +1,22 @@ | |||
| public class Formatter { | |||
|
|
|||
| public float cost; | |||
There was a problem hiding this comment.
Переменная вроде бы никак не используется, можно ее удалить.
|
|
||
| while(true){ | ||
|
|
||
| System.out.println("Введите название товара, если хотите завершить работу программы, то напишите 'Завершиить'"); |
There was a problem hiding this comment.
Небольшая опечатка в слове Завершиить
| int count; | ||
| while(true){ | ||
| System.out.println("Введите количество человек"); | ||
| try { | ||
| count = Integer.parseInt(scanner.nextLine()); | ||
| if(count < 1){ | ||
| System.out.println("Некорректное количество человек"); | ||
| } | ||
| else if(count == 1){ | ||
| System.out.println("Не имеет смысла производить расчёты для одного человека"); | ||
| } | ||
| else{ | ||
| break; | ||
| } |
There was a problem hiding this comment.
Вместо использования оператора break можно попробовать сразу возвращать значение переменной count следующим образом:
try {
int count = Integer.parseInt(scanner.nextLine());
if (count < 1) {
...
} else if (count == 1) {
....
} else {
return count;
}
} catch (Exception e) {
...
}
Перемещение объявления переменной count ближе к месту ее использования улучшит читаемость кода.
| break; | ||
| } | ||
| } | ||
| catch (Exception e){ |
There was a problem hiding this comment.
Лучше перехватывать конкретное исключение NumberFormatException, возникающее при вызове метода Integer.parseInt, вместо перехвата всех исключений, наследующихся от Exception.
Перехватывая исключение NumberFormatException напрямую, мы указываем, что именно это исключение ожидается в данном контексте. Это делает код более явным и предсказуемым для других разработчиков и упрощает отладку, поскольку мы более точно определяем, какие ошибки ожидаем и обрабатываем.
|
|
||
| int wholePart = (int)cost; | ||
|
|
||
| if(wholePart % 10 == 1 && (wholePart % 11 != 11)){ |
There was a problem hiding this comment.
Условие wholePart % 11 != 11 всегда будет истинным, потому что результат операции % (остаток от деления) не может быть равен делителю.
|
|
||
| public float cost; | ||
|
|
||
| public String getEnding(float cost){ |
There was a problem hiding this comment.
Метод можно сделать статическим, добавив ключевое слово static. Таким образом, другие части программы смогут вызывать этот метод, не создавая объект класса:
System.out.printf("Общая сумма: %.2f %s\n", totalPrice, Formatter.getEnding(totalPrice));
первая версия программы