Repository navigation
Первый вариант программы Calculator #1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -7,4 +7,5 @@ repositories { | |
| } | ||
|
|
||
| dependencies { | ||
| implementation 'org.jetbrains:annotations:15.0' | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,8 +1,127 @@ | ||
| // dev branch for Y.Practicum | ||
|
|
||
| import java.util.Scanner; | ||
| import java.lang.Math; | ||
|
|
||
| // Создаем класс заказа с полями (блюдо, цена блюда) | ||
| class Order | ||
| { | ||
| public String dishInOrder; | ||
| public double costOfTheDish; | ||
|
|
||
| //создаем в классе конструктор, чтобы мог вернуть несколько значений блюда (order.название, order.цена) | ||
| public Order(String dishInOrder, double costOfTheDish) | ||
| { | ||
| this.dishInOrder = dishInOrder; | ||
| this.costOfTheDish = costOfTheDish; | ||
| } | ||
| } | ||
|
|
||
|
|
||
| public class Main { | ||
|
|
||
| // Создаем экземпляр класса Scanner. | ||
| static Scanner scanner = new Scanner(System.in); | ||
|
|
||
|
|
||
| public static void main(String[] args) { | ||
| // ваш код начнется здесь | ||
| // вы не должны ограничиваться только классом Main и можете создавать свои классы по необходимости | ||
| System.out.println("Привет Мир"); | ||
| // 1. Запрашиваем количество людей (с проверкой правильности ввода). Получаем целое число N | ||
|
|
||
| int countOfFriends = amountFriends(); | ||
|
|
||
| // 2. Запрашиваем наименование заказа и его стоимость до слова завершить. Получаем строку заказов и общую стоимость | ||
|
|
||
| Order order = getOrder(); | ||
|
|
||
| // 3. Получаем результат деления общей стоимости заказа на количество людей в компанию | ||
|
|
||
| double partPayment = order.costOfTheDish / countOfFriends; | ||
|
|
||
| // 4. Форматируем результат в рублях и с двумя знаками после запятой | ||
|
|
||
| String printLineCost = payRubles(partPayment); | ||
|
|
||
| // 5. Выводим результат | ||
| System.out.println("_______________________________________"); | ||
| System.out.println("Уважаемые посетители нашего заведения!"); | ||
| System.out.println("Ваш заказ сегодня: \n" + order.dishInOrder); | ||
| System.out.println("на общую сумму: " + payRubles(order.costOfTheDish)); | ||
| System.out.println("Каждый из Вас должен заплатить по: " + printLineCost); | ||
| } | ||
|
|
||
|
|
||
| //Метод вызывается для ввода количества застольных человек,с кем делить счет | ||
| public static int amountFriends() { | ||
| int N; | ||
| while (true) { | ||
| System.out.println("Введите количество человек на сколько делить заказ"); | ||
|
|
||
| if(scanner.hasNextInt()) { // если введено целое число - работаем с ним | ||
| N = scanner.nextInt(); | ||
| if (N > 1) { break; } //Если введенное значение число и оно больше 1 - прерываем. В противном случаем цикл повторяется до бесконечности | ||
| } else { | ||
| scanner.next();; | ||
| } | ||
| // Проверка введенного значения | ||
| } | ||
| return N; | ||
| } | ||
|
|
||
| // Метод расчета и возврата списка блюд и общей стоимости заказа (Order.название, Order.цена) | ||
| public static Order getOrder() { | ||
| // Задаем начальные значения для возврата при обьявлении переменных | ||
| String dishInOrder = ""; | ||
| double costOfTheDish = 0.0; | ||
| String dish = ""; | ||
| double cost ; | ||
| Scanner scanner = new Scanner(System.in); | ||
|
|
||
| System.out.println("*************************************************************"); | ||
| System.out.println("Введите последовательно название и стоимость заказанных блюд."); | ||
| System.out.println("Справочно: для окончания подсчета введите слово ЧАЕВЫЕ и их стоимость, или ЗАВЕРШИТЬ"); | ||
| System.out.println(" "); | ||
|
|
||
| while (!(dish.equalsIgnoreCase("Чаевые"))) // цикл работает пока вместо названия блюда не будет введено "Завершение" - без учета регистра. При вводе "Чаевые" - !true - прервет цикл | ||
| { | ||
| System.out.println("Введите название блюда (или кодовое слово 'Завершить'): "); | ||
| dish = scanner.next(); // Считываем название | ||
| if (dish.equalsIgnoreCase("Завершить")) { break; } | ||
|
|
||
| dishInOrder = (dishInOrder + dish + "\n"); // Формируем список блюд | ||
|
|
||
| System.out.println("Введите стоимость блюда (или размер чаевых): "); | ||
|
|
||
| while (true) { | ||
|
|
||
| if (scanner.hasNextDouble() || scanner.hasNextInt() ) { // если введено число - работаем с ним | ||
| cost = scanner.nextDouble(); // Считываем цену | ||
| if (cost > 0) // Проверяем ввод пользователя. Если не число - не суммируем. Можно и переспросить | ||
| { | ||
| costOfTheDish = costOfTheDish + cost; // Суммируем | ||
| break; | ||
| } | ||
| } else { | ||
|
|
||
| System.out.println("Введите, пожалуйста, правильно стоимость указанного блюда, а не это " + scanner.next()); //выводим в консоль сообщение | ||
|
|
||
| } | ||
| } | ||
|
|
||
| } | ||
|
|
||
| return new Order(dishInOrder, costOfTheDish); | ||
| } | ||
|
|
||
| // Функция (метод) определения окончания рубль - рубля - рублей и форматирования до 2 знаков после запятой | ||
| public static String payRubles(double partPayment) { | ||
| double PayInt; | ||
| PayInt = Math.floor(partPayment); | ||
| String endRub = "рубль"; //Обьявляем переменную для окончания и задем значение по умолчанию | ||
| if (PayInt % 10 == 0 || PayInt % 10 > 4 || (PayInt % 100 > 10 && PayInt % 100 < 20)) { | ||
| endRub = "рублей"; | ||
| } else if (PayInt % 10 > 1 && PayInt % 10 < 5) { | ||
| endRub = "рубля"; | ||
| } | ||
| return String.format("%.2f", partPayment) + " " + endRub; //Форматируем и возвращаем строку с окончанием рубль - рубля - рублей | ||
|
Comment on lines
+116
to
+125
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Проверил. Работает корректно 👍
Owner
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Спасибо! |
||
| } | ||
| } | ||
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.
🍏 Касаемо предупреждения от студии - Conditional break inside loop. Студия предлагает использовать do while цикл, как более оптимальное решение.
Здесь можно найти про принцип работы https://metanit.com/java/tutorial/2.6.php