From 48346722e7ce2d54ef901146b16a6d9ae1cd0bc9 Mon Sep 17 00:00:00 2001 From: wildmeats Date: Sun, 12 May 2024 20:20:43 +0300 Subject: [PATCH 1/2] =?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 | 62 +++++++++++++++++++++++++++++++++++ src/main/java/Formatter.java | 14 ++++++++ src/main/java/Item.java | 11 +++++++ src/main/java/Main.java | 6 +++- 4 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 src/main/java/Calculator.java create mode 100644 src/main/java/Formatter.java create mode 100644 src/main/java/Item.java diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java new file mode 100644 index 000000000..e03cefc9f --- /dev/null +++ b/src/main/java/Calculator.java @@ -0,0 +1,62 @@ +import java.util.ArrayList; +import java.util.Scanner; + +public class Calculator { + private ArrayList items; + private int numberOfPeople; + public Calculator() { items = new ArrayList<>();} + public void start() { + 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); + if (numberOfPeople <= 1) { + System.out.println("Ошибка: Введите корректное количество гостей, больше одного."); + } else { + validInput = true; + } + } + } + while (true) { + 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("Ошибка: Неккоректный формат ввода или некорректная сумма товара."); + continue; + } + String name = parts[0]; + double price = Double.parseDouble(parts[1]); + items.add(new Item(name, price)); + System.out.println("Товар успешно добавлен."); + System.out.println("Хотите добавить еще один товар?"); + } + System.out.println("Добавленные товары:"); + for(Item item : items) { + System.out.println(item.getName() + " - " + item.getPrice()); + } + 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) { + 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 new file mode 100644 index 000000000..fd5980a20 --- /dev/null +++ b/src/main/java/Formatter.java @@ -0,0 +1,14 @@ +public class Formatter { + public static String formatRubles(double amount) { + int rubles = (int) amount; + String rublesString; + 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; + } +} diff --git a/src/main/java/Item.java b/src/main/java/Item.java new file mode 100644 index 000000000..2bdc45e96 --- /dev/null +++ b/src/main/java/Item.java @@ -0,0 +1,11 @@ +public class Item { + private String name; + private double price; + + public Item(String name, double price) { + this.name = name; + this.price = price; + } + public String getName() {return name;} + public double getPrice() {return price;} +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java index db9356a08..e01b28a33 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,6 +1,10 @@ + public class Main { public static void main(String[] args) { - System.out.println("Hello world!"); + Calculator calculator = new Calculator(); + calculator.start(); + + } } \ No newline at end of file From eb59c141cad802f9921e036af62ebfc7d37e1370 Mon Sep 17 00:00:00 2001 From: wildmeats Date: Mon, 5 Aug 2024 21:33:06 +0300 Subject: [PATCH 2/2] =?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