From 0c9248e650572170bbce1eda678e0329efb343f8 Mon Sep 17 00:00:00 2001 From: Egor Date: Wed, 30 Aug 2023 13:42:09 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=94=D0=B7=20=D0=9A=D0=BE=D1=80=D0=BE=D0=BB=D0=B5=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Main.java | 116 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 116 insertions(+) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index db9356a08..752e4d866 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,5 +1,121 @@ +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; public class Main { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + + // Запрашиваем количество людей для разделения счета + int numberOfPeople = getNumberOfPeople(scanner); + + // Создаем объект калькулятора + BillCalculator calculator = new BillCalculator(numberOfPeople); + + // Ввод товаров + while (true) { + System.out.print("Введите название товара (или 'Завершить' для окончания ввода): "); + String itemName = scanner.next(); + + if (itemName.equalsIgnoreCase("Завершить")) { + break; + } + + double itemPrice = getItemPrice(scanner); + + calculator.addItem(itemName, itemPrice); + } + + // Вывод результатов + calculator.displayBill(); + } + + private static int getNumberOfPeople(Scanner scanner) { + int numberOfPeople; + do { + System.out.print("Введите количество людей для разделения счета: "); + while (!scanner.hasNextInt()) { + System.out.println("Ошибка: Введите число больше 1."); + scanner.next(); // Пропускаем некорректный ввод + } + numberOfPeople = scanner.nextInt(); + + if (numberOfPeople == 1) { + System.out.println("Ошибка: Нет смысла разделять счет для одного человека."); + } else if (numberOfPeople < 1) { + System.out.println("Ошибка: Некорректное значение. Введите число больше 1."); + } + } while (numberOfPeople <= 1); + return numberOfPeople; + } + + private static double getItemPrice(Scanner scanner) { + double itemPrice; + do { + System.out.print("Введите стоимость товара (в формате рубли.копейки): "); + while (!scanner.hasNextDouble()) { + System.out.println("Ошибка: Введите корректную стоимость."); + scanner.next(); // Пропускаем некорректный ввод + } + itemPrice = scanner.nextDouble(); + if (itemPrice < 0) { + System.out.println("Ошибка: Стоимость не может быть отрицательной."); + } + } while (itemPrice < 0); + return itemPrice; + } +} + +class BillCalculator { + private final int numberOfPeople; + private final List items = new ArrayList<>(); + private final List prices = new ArrayList<>(); + + public BillCalculator(int numberOfPeople) { + this.numberOfPeople = numberOfPeople; + } + + public void addItem(String itemName, double itemPrice) { + items.add(itemName); + prices.add(itemPrice); + System.out.println("Товар '" + itemName + "' с ценой " + formatPrice(itemPrice) + " успешно добавлен."); + } + + public void displayBill() { + System.out.println("\nДобавленные товары:"); + for (int i = 0; i < items.size(); i++) { + System.out.println(items.get(i) + ": " + formatPrice(prices.get(i))); + } + + double totalBill = calculateTotalBill(); + double sharePerPerson = totalBill / numberOfPeople; + + System.out.println("\nСумма, которую каждый должен заплатить:"); + for (int i = 1; i <= numberOfPeople; i++) { + System.out.println("Человек " + i + ": " + formatPrice(sharePerPerson)); + } + } + + private double calculateTotalBill() { + double total = 0; + for (double price : prices) { + total += price; + } + return total; + } + + private String formatPrice(double price) { + int rubles = (int) price; + int kopecks = (int) ((price - rubles) * 100); + + if (rubles == 1) { + return rubles + " рубль " + kopecks + " копеек"; + } else if (rubles > 1 && rubles < 5) { + return rubles + " рубля " + kopecks + " копеек"; + } else { + return rubles + " рублей " + kopecks + " копеек"; + } + } public static void main(String[] args) { System.out.println("Hello world!"); } From afc7789e18fa21a9e70c9c74760bc0cf8f90f5d4 Mon Sep 17 00:00:00 2001 From: Egor Date: Thu, 31 Aug 2023 21:59:41 +0300 Subject: [PATCH 2/3] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D0=BE=D0=B5=20=20=D0=94=D0=B7=20=D0=9A=D0=BE?= =?UTF-8?q?=D1=80=D0=BE=D0=BB=D0=B5=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Main.java | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 752e4d866..828ed2eca 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -40,12 +40,10 @@ private static int getNumberOfPeople(Scanner scanner) { } numberOfPeople = scanner.nextInt(); - if (numberOfPeople == 1) { - System.out.println("Ошибка: Нет смысла разделять счет для одного человека."); - } else if (numberOfPeople < 1) { - System.out.println("Ошибка: Некорректное значение. Введите число больше 1."); + if (numberOfPeople <= 0) { + System.out.println("Ошибка: Некорректное значение. Введите число больше 0."); } - } while (numberOfPeople <= 1); + } while (numberOfPeople <= 0); return numberOfPeople; } @@ -107,13 +105,16 @@ private double calculateTotalBill() { private String formatPrice(double price) { int rubles = (int) price; int kopecks = (int) ((price - rubles) * 100); + int rublesLastDigit = rubles % 10; - if (rubles == 1) { - return rubles + " рубль " + kopecks + " копеек"; - } else if (rubles > 1 && rubles < 5) { - return rubles + " рубля " + kopecks + " копеек"; - } else { + if (rubles >= 11 && rubles <= 19) { return rubles + " рублей " + kopecks + " копеек"; + } else { + return switch (rublesLastDigit) { + case 1 -> rubles + " рубль " + kopecks + " копеек"; + case 2, 3, 4 -> rubles + " рубля " + kopecks + " копеек"; + default -> rubles + " рублей " + kopecks + " копеек"; + }; } } public static void main(String[] args) { From 9c4df1584fe629488b6722ac6028a4a7afe3aa4a Mon Sep 17 00:00:00 2001 From: Egor Date: Thu, 31 Aug 2023 21:59:41 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D0=BE=D0=B5=20=20=D0=94=D0=B7=20=D0=9A=D0=BE?= =?UTF-8?q?=D1=80=D0=BE=D0=BB=D0=B5=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Main.java | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 752e4d866..828ed2eca 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -40,12 +40,10 @@ private static int getNumberOfPeople(Scanner scanner) { } numberOfPeople = scanner.nextInt(); - if (numberOfPeople == 1) { - System.out.println("Ошибка: Нет смысла разделять счет для одного человека."); - } else if (numberOfPeople < 1) { - System.out.println("Ошибка: Некорректное значение. Введите число больше 1."); + if (numberOfPeople <= 0) { + System.out.println("Ошибка: Некорректное значение. Введите число больше 0."); } - } while (numberOfPeople <= 1); + } while (numberOfPeople <= 0); return numberOfPeople; } @@ -107,13 +105,16 @@ private double calculateTotalBill() { private String formatPrice(double price) { int rubles = (int) price; int kopecks = (int) ((price - rubles) * 100); + int rublesLastDigit = rubles % 10; - if (rubles == 1) { - return rubles + " рубль " + kopecks + " копеек"; - } else if (rubles > 1 && rubles < 5) { - return rubles + " рубля " + kopecks + " копеек"; - } else { + if (rubles >= 11 && rubles <= 19) { return rubles + " рублей " + kopecks + " копеек"; + } else { + return switch (rublesLastDigit) { + case 1 -> rubles + " рубль " + kopecks + " копеек"; + case 2, 3, 4 -> rubles + " рубля " + kopecks + " копеек"; + default -> rubles + " рублей " + kopecks + " копеек"; + }; } } public static void main(String[] args) {