From eb59c141cad802f9921e036af62ebfc7d37e1370 Mon Sep 17 00:00:00 2001 From: wildmeats Date: Mon, 5 Aug 2024 21:33:06 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=B5=D0=BA=D1=82=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=20=E2=84=96?= =?UTF-8?q?=201=20=D0=9A=D0=BE=D0=BD=D0=B4=D1=80=D0=B0=D1=88=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Calculator.java | 61 ++++++++++++++++++++++++++--------- src/main/java/Formatter.java | 13 +++++--- src/main/java/Item.java | 12 +++++-- src/main/java/Main.java | 2 -- 4 files changed, 62 insertions(+), 26 deletions(-) diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java index e03cefc9f..784863701 100644 --- a/src/main/java/Calculator.java +++ b/src/main/java/Calculator.java @@ -1,62 +1,91 @@ import java.util.ArrayList; import java.util.Scanner; + public class Calculator { private ArrayList items; private int numberOfPeople; - public Calculator() { items = new ArrayList<>();} + + public Calculator() { + items = new ArrayList<>(); + } + public void start() { + inputNumberOfPeople(); + inputItems(); + printItems(); + printAmountPerPerson(); + } + + private void inputNumberOfPeople() { Scanner scanner = new Scanner(System.in); boolean validInput = false; while (!validInput) { - System.out.println("На скольких человек необходимо разделить счёт:"); - String inmput = scanner.nextLine().trim(); - if (inmput.matches("\\d+")) { - numberOfPeople = Integer.parseInt(inmput); + System.out.println("На сколько человек необходимо разделить счёт:"); + String input = scanner.nextLine().trim(); + if (input.matches("\\d+")) { + numberOfPeople = Integer.parseInt(input); if (numberOfPeople <= 1) { - System.out.println("Ошибка: Введите корректное количество гостей, больше одного."); + System.out.println("Ошибка: Введите корректное количество гостей, больше 1."); } else { validInput = true; } + } else { + System.out.println("Ошибка: Введите целое число."); } } + } + + private void inputItems() { + Scanner scanner = new Scanner(System.in); while (true) { - System.out.println("Введите название товара и его стоимость в формате 'название стоимость': например, пиво 58.99\nЛибо введите команду 'Завершить' для того, чтоб завершить процесс добавления товаров."); + System.out.println("Введите название товара и его стоимость в формате 'название стоимость': например, пиво 58.99\nЛибо введите команду 'Завершить' для того, чтобы завершить процесс добавления товаров."); String line = scanner.nextLine().trim(); if (line.equalsIgnoreCase("завершить")) { break; } + String[] parts = line.split(" "); if (parts.length != 2 || !isValidPrice(parts[1])) { - System.out.println("Ошибка: Неккоректный формат ввода или некорректная сумма товара."); + System.out.println("Ошибка: Некорректный формат ввода или некорректная сумма товара."); continue; } + String name = parts[0]; - double price = Double.parseDouble(parts[1]); + double price = Double.parseDouble(parts[1].replace(',', '.')); + items.add(new Item(name, price)); System.out.println("Товар успешно добавлен."); System.out.println("Хотите добавить еще один товар?"); } + } + + private void printItems() { System.out.println("Добавленные товары:"); - for(Item item : items) { + for (Item item : items) { System.out.println(item.getName() + " - " + item.getPrice()); } + } + + private void printAmountPerPerson() { double total = 0; for (Item item : items) { total += item.getPrice(); } double perPerson = total / numberOfPeople; + String rublesString = Formatter.formatRubles(perPerson); + System.out.println("Каждый человек должен заплатить: " + rublesString); } + private boolean isValidPrice(String priceStr) { - String[] parts = priceStr.split("\\."); - if (parts.length !=2) { + try { + String normalizedPrice = priceStr.replace(',', '.'); + double price = Double.parseDouble(normalizedPrice); + return price >= 0; + } catch (NumberFormatException e) { return false; } - if (!parts[0].matches("\\d+") || !parts[1].matches("\\d{2}")){ - return false; - } - return true; } } diff --git a/src/main/java/Formatter.java b/src/main/java/Formatter.java index fd5980a20..f2ad677a3 100644 --- a/src/main/java/Formatter.java +++ b/src/main/java/Formatter.java @@ -1,14 +1,17 @@ public class Formatter { public static String formatRubles(double amount) { int rubles = (int) amount; + int kopecks = (int) Math.round((amount - rubles) * 100); + String rublesString; - if (rubles % 10 == 1 && rubles % 100 != 11){ - rublesString = "Рубль"; - } else if (rubles % 10 >= 2 && rubles % 10 <= 4 &&(rubles % 100 < 10 || rubles % 100 >= 20)) { + if (rubles % 10 == 1 && rubles % 100 != 11) { + rublesString = "рубль"; + } else if (rubles % 10 >= 2 && rubles % 10 <= 4 && (rubles % 100 < 10 || rubles % 100 >= 20)) { rublesString = "рубля"; } else { rublesString = "рублей"; } - return rubles + " " + rublesString; + + return rubles + " " + rublesString + " " + String.format("%02d", kopecks) + " копеек"; } -} +} \ No newline at end of file diff --git a/src/main/java/Item.java b/src/main/java/Item.java index 2bdc45e96..f7e2e7b85 100644 --- a/src/main/java/Item.java +++ b/src/main/java/Item.java @@ -6,6 +6,12 @@ public Item(String name, double price) { this.name = name; this.price = price; } - public String getName() {return name;} - public double getPrice() {return price;} -} + + public String getName() { + return name; + } + + public double getPrice() { + return price; + } +} \ No newline at end of file diff --git a/src/main/java/Main.java b/src/main/java/Main.java index e01b28a33..eb25e764c 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -4,7 +4,5 @@ public class Main { public static void main(String[] args) { Calculator calculator = new Calculator(); calculator.start(); - - } } \ No newline at end of file