Skip to content

Моё консольное приложение - #1

Open
TimurShU wants to merge 3 commits into
mainfrom
dev
Open

TimurShU wants to merge 3 commits into
mainfrom
dev

Conversation

@TimurShU

@TimurShU TimurShU commented Jul 2, 2023

Copy link
Copy Markdown
Owner

:)

Comment thread src/main/java/Main.java Outdated
int numberOfGuests;

while (true) {
numberOfGuests = scanner.nextInt();

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Стоит не забывать, что мы не можем быть уверены в том, что пользователь введет именно целочисленное значение. Если пользователь введет строку или же дробное число, при программа выведет ошибку. Лучше такого не допускать, а обрабатывать. Можно использовать методы scanner.hasNextInt() или try-catch.

Comment thread src/main/java/Main.java Outdated
System.out.println("Это некорректное значение для подсчёта. Пожалуйста введите корректное количество гостей.");
}
}
ExpensesCalculator.calculate(scanner, listOfExpenses, numberOfGuests);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⏫ Над переменной listOfExpenses в методе main не совершается никаких манипуляций, поэтому мы можем спокойно перенести ее объявление в calculate

Comment thread src/main/java/ExpensesCalculator.java Outdated
listOfExpenses += thing;
listOfExpenses += " ";
String formattedPrice;
if (price == 1) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ В данном случае нам важно проверять не само значение цены, а его единичную часть (т.е. остаток от деления на 10). Так например если мы введем цену товара 24, то программа выведет 24 рублей, хотя правильно будет 24 рубля.

System.out.println("Введите стоимость товара:");
float price = 0;

if (scanner.hasNextFloat()) {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⏫ Если пользователь вводит неправильное значение, то будет правильнее указать ему на ошибку и предложить ввести значение повторно. Для того, чтобы продолжить выполнение цикла без необходимости пройти через весь блок кода мы можем вызвать ключевым словом continue

Comment thread src/main/java/ExpensesCalculator.java Outdated
formattedTotal = String.format("%.2f рублей", perGuest);
}
System.out.printf("Итого расходов на одного гостя: %s%n", formattedTotal);
String formattedTotal = String.format("Итого расходов на одного гостя: %.2f %s%n", perGuest,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Обрати внимание, что

  • Такой алгоритм не покрывает сценарии, когда наше итоговое значение > 100. Например, если мы введем 124, то вместо "рубля" получим "рублей"
  • Такой алгоритм не учитывает числа с окончанием 1 (кроме самой 1), Так если мы получим итоговую цену 21, то вместо "рубль" получим "рублей"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я бы тебе посоветал вынести в отдельную функцию алгоритм, который применяется для определения окончания при поштучном товаре, и применять эту функцию там и при итоговом подсчете

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants