Conversation
src/main/java/Main.java
Outdated
| guests = scanner.nextInt(); | ||
| if (guests <= 1) { | ||
| System.out.println("Некорректное значение. Количество гостей должно быть больше 1."); | ||
| } else { | ||
| guestsNum = true; | ||
| } |
There was a problem hiding this comment.
⚠ Здесь и в остальных участках, где принимается ввод числового значения, лучше добавить обработку ввода некорректных значений, т.е. если пользователь введет на вопрос про количество человек и стоимость товара вместо чисел строки, то приложение упадет.
src/main/java/Main.java
Outdated
| String itemName = scanner.next(); | ||
|
|
||
| System.out.print("Введите стоимость товара (в формате рубли.копейки): "); | ||
| double itemCost = scanner.nextDouble(); |
There was a problem hiding this comment.
⚠ Также нужно учесть, что стоимость товара не может быть отрицательной
src/main/java/Main.java
Outdated
| int rubles = (int) costPerPerson; | ||
| String rubleSuffix; | ||
| if (rubles == 1) { | ||
| rubleSuffix = "рубль"; | ||
| } else if (rubles >= 2 && rubles <= 4) { | ||
| rubleSuffix = "рубля"; | ||
| } else { | ||
| rubleSuffix = "рублей"; | ||
| } | ||
| System.out.println("Каждый гость должен заплатить " + formattedCost + " " + rubleSuffix + "."); |
There was a problem hiding this comment.
🍏 Рекомендую вынести в отдельную функцию.
⚠ Если стоимость для каждого гостя будет равна 24, то на консоль будет выведено - 24,00 рублей

Для правильной обработки окончания нужно взять остаток от деления costPerPerson на 10 (costPerPerson % 10) и проверить полученное значение. Т.е. если значение будет равно 24, то остаток от деления на 10 будет - 4. Тогда будет выведено корректное окончание.
Плюс учесть, что для чисел 11-19 - "рублей" - для этого стоит проверять, что costPerPerson % 100 между 11 и 19 включительно находится
| String costString = item.substring(item.lastIndexOf(" ") + 1, item.lastIndexOf(" руб.")); | ||
| totalValue += Double.parseDouble(costString); |
There was a problem hiding this comment.
Весьма интересное решение.
В любом случае, приложение может падать из-за неверно определенного индекса item.lastIndexOf(" ") + 1. Начиная с конца, этот метод вернет индекс пробела, который стоит перед "руб.", вдобавок к этому индексу прибавляем +1. Далее определяем индекс item.lastIndexOf(" руб."), с которого начинается " руб."
Ошибка возникает из-за того, что мы пытаемся из строки выдернуть отрезок с 13 по 12 индекс. Можно внести исправления таким образом и будет работать:
String costString = item.substring(item.indexOf(" ") + 2, item.lastIndexOf(" руб."));
totalValue += Double.parseDouble(costString.replace(",", "."));
Но все также получится не очень хороший способ. По сути костыль)
По хорошему, ты мог в классе Calculator создать статичные переменные. Например вот такие
class Calculator {
public static String itemList;
public static int guests;
public static int totalValue;
Куда сложил бы все необходимое для вычислений и парсить строки, чтобы вычленить оттуда число не пришлось бы. Но все же плюс, за такую идею)
На доработку не буду отправлять, т.к. остальное работает как часы. Просто внеси исправления, которые я тебе предложил

111