From d450c5cb32624a3bcc5960b8f2020dd1bab57ed7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B0=D1=81=D1=82=D0=B0=D1=81=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=9C=D0=B0=D1=80=D1=83=D0=B3=D0=B8=D0=BD=D0=B0?= <45240148+marugish@users.noreply.github.com> Date: Tue, 9 Jan 2024 22:17:00 +0300 Subject: [PATCH 1/3] =?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?1:=20=D0=BF=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20=D1=81=D0=B4=D0=B0?= =?UTF-8?q?=D1=87=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 7 +++++ src/main/java/Calculator.java | 31 +++++++++++++++++++ src/main/java/Formatter.java | 26 ++++++++++++++++ src/main/java/Main.java | 58 +++++++++++++++++++++++++++++++++-- src/main/java/Product.java | 10 ++++++ 5 files changed, 130 insertions(+), 2 deletions(-) create mode 100644 src/main/java/Calculator.java create mode 100644 src/main/java/Formatter.java create mode 100644 src/main/java/Product.java diff --git a/README.md b/README.md index 63be1bfe0..9a5cfde81 100644 --- a/README.md +++ b/README.md @@ -1 +1,8 @@ # Пустой репозиторий для работы с Java кодом в Android Studio + +Вся логика взаимодействия с пользователем описана в классе Main: + - Программа запрашивает у пользователя, на скольких человек разделить счёт и проверяет данные на корректность с помощью if/else, а также try/catch. + - При успешном вводе количества человек (>1) на вход принимает информацию о товарах. Эта информация попадает в класс Calculator. + - Класс Calculator состоит из основных методов: подсчёт общей стоимости для каждого пользователя, добавление в список товаров, а также вывод списка на экран после добавления всех. + - Каждый товар - объект класса Product c двумя полями: "название товара" и "цена", а также конструктором. + - Класс Formatter состоит из двух основных методов, которые помогают с выводом на экран: округление суммы до двух знаков после запятой и склонение валюты "рубль". diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java new file mode 100644 index 000000000..bbfc69cd6 --- /dev/null +++ b/src/main/java/Calculator.java @@ -0,0 +1,31 @@ +public class Calculator { + int users; + double totalCost = 0.00; + String listOfProducts = ""; + Calculator(int users) + { + this.users = users; + } + + void addProduct(Product product) + { + totalCost += product.costOfProduct; + // формируем список продуктов заранее + Formatter formatter = new Formatter(); + listOfProducts = listOfProducts + "\n" + product.nameOfProduct + " - " + + formatter.roundingTheDouble(product.costOfProduct) + + formatter.displayCurrency(product.costOfProduct); + System.out.println("Товар успешно добавлен."); + } + + void displayProducts() + { + System.out.println("Добавленнные товары:" + listOfProducts); + } + + double calculateScoreForEachPerson() + { + return totalCost / users; + } + +} diff --git a/src/main/java/Formatter.java b/src/main/java/Formatter.java new file mode 100644 index 000000000..c180fa41f --- /dev/null +++ b/src/main/java/Formatter.java @@ -0,0 +1,26 @@ +public class Formatter { + String roundingTheDouble(double totalCostForEach) + { + return String.format("%.2f", totalCostForEach); + } + + String displayCurrency(double totalCostForEach) + { + String currency; + int cost = (int) Math.floor(totalCostForEach); + switch (cost % 10) { + case 1 -> { + if (cost % 100 == 11) currency = " рублей."; + else currency = " рубль."; + } + case 2, 3, 4 -> + { + if (cost % 100 == 12 || cost % 100 == 13 || cost % 100 == 14) + currency = " рублей."; + else currency = " рубля."; + } + default -> currency = " рублей."; + } + return currency; + } +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java index db9356a08..def596794 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,6 +1,60 @@ - +import java.util.InputMismatchException; +import java.util.Scanner; public class Main { + public static void main(String[] args) { - System.out.println("Hello world!"); + Scanner scanner = new Scanner(System.in); + Formatter formatter = new Formatter(); + while (true) + { + System.out.println("На скольких человек разделить счёт?"); + try { + int persons = scanner.nextInt(); + scanner.nextLine(); + if (persons < 1) System.out.println("Ошибка: некорректное число пользователей."); + else if (persons == 1) System.out.println("Ошибка: делить ничего не требуется."); + else { + System.out.println("Успех: корректное число пользователей, можете воспользоваться калькулятором."); + Calculator calculator = new Calculator(persons); + while (true) + { + System.out.println("Введите название товара:"); + String nameOfProduct = scanner.nextLine(); + + double costOfProduct; + while (true) + { + System.out.println("Введите стоимость товара (Формат: рубли,копейки):"); + // try catch, написанный для int также отловит недопустимые символы, введённые и здесь + costOfProduct = scanner.nextDouble(); + scanner.nextLine(); + if (costOfProduct <= 0.00) + { + System.out.println("Ошибка: некорректная цена, введите положительное число."); + } + else break; + } + // Можно создавать и добавлять в список новый продукт + Product product = new Product(nameOfProduct, costOfProduct); + calculator.addProduct(product); + + System.out.println("Добавить ещё товар?"); + String usersAnswer = scanner.nextLine(); + if (usersAnswer.equalsIgnoreCase("завершить")) break; + } + // Вывод результатов пользователю + calculator.displayProducts(); + System.out.println("Итоговая стоимость: " + + formatter.roundingTheDouble(calculator.calculateScoreForEachPerson()) + + formatter.displayCurrency(calculator.calculateScoreForEachPerson())); + break; + } + } + catch (InputMismatchException e) { + System.out.println("Ошибка: недопустимый тип ввода."); + scanner.nextLine(); + } + } + scanner.close(); } } \ No newline at end of file diff --git a/src/main/java/Product.java b/src/main/java/Product.java new file mode 100644 index 000000000..63f483023 --- /dev/null +++ b/src/main/java/Product.java @@ -0,0 +1,10 @@ +public class Product { + String nameOfProduct; + double costOfProduct; + + Product(String nameOfProduct, double costOfProduct) + { + this.nameOfProduct = nameOfProduct; + this.costOfProduct = costOfProduct; + } +} From a1f53d5d03304a4e8e733a2a9ac817dc3ee5b599 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B0=D1=81=D1=82=D0=B0=D1=81=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=9C=D0=B0=D1=80=D1=83=D0=B3=D0=B8=D0=BD=D0=B0?= <45240148+marugish@users.noreply.github.com> Date: Tue, 9 Jan 2024 22:23:05 +0300 Subject: [PATCH 2/3] =?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?1:=20=D0=BF=D0=B5=D1=80=D0=B2=D0=B0=D1=8F=20=D1=81=D0=B4=D0=B0?= =?UTF-8?q?=D1=87=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Main.java | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index def596794..b0e6e6ad8 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -25,14 +25,17 @@ public static void main(String[] args) { while (true) { System.out.println("Введите стоимость товара (Формат: рубли,копейки):"); - // try catch, написанный для int также отловит недопустимые символы, введённые и здесь - costOfProduct = scanner.nextDouble(); - scanner.nextLine(); - if (costOfProduct <= 0.00) - { - System.out.println("Ошибка: некорректная цена, введите положительное число."); + try { + costOfProduct = scanner.nextDouble(); + scanner.nextLine(); + if (costOfProduct <= 0.00) { + System.out.println("Ошибка: некорректная цена, введите положительное число."); + } else break; + } + catch (InputMismatchException e) { + System.out.println("Ошибка: недопустимый тип ввода."); + scanner.nextLine(); } - else break; } // Можно создавать и добавлять в список новый продукт Product product = new Product(nameOfProduct, costOfProduct); @@ -51,7 +54,7 @@ public static void main(String[] args) { } } catch (InputMismatchException e) { - System.out.println("Ошибка: недопустимый тип ввода."); + System.out.println("Ошибка: недопустимый тип ввода. Требуется ввести целое число."); scanner.nextLine(); } } From 5d37fd7d7edc97941a9a2e1b35bd65ba006ab971 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B0=D1=81=D1=82=D0=B0=D1=81=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=9C=D0=B0=D1=80=D1=83=D0=B3=D0=B8=D0=BD=D0=B0?= <45240148+marugish@users.noreply.github.com> Date: 2024年1月14日 15:54:18 +0300 Subject: [PATCH 3/3] =?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?1:=20=D0=B2=D1=82=D0=BE=D1=80=D0=B0=D1=8F=20=D1=81=D0=B4=D0=B0?= =?UTF-8?q?=D1=87=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Calculator.java | 19 +++++------ src/main/java/Formatter.java | 19 +++++------ src/main/java/Main.java | 62 +++++++++++++++++------------------ src/main/java/Product.java | 3 +- 4 files changed, 49 insertions(+), 54 deletions(-) diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java index bbfc69cd6..e9bb17136 100644 --- a/src/main/java/Calculator.java +++ b/src/main/java/Calculator.java @@ -2,29 +2,26 @@ public class Calculator { int users; double totalCost = 0.00; String listOfProducts = ""; - Calculator(int users) - { + + Calculator(int users) { this.users = users; } - void addProduct(Product product) - { + void addProduct(Product product) { totalCost += product.costOfProduct; // формируем список продуктов заранее Formatter formatter = new Formatter(); - listOfProducts = listOfProducts + "\n" + product.nameOfProduct + " - " - + formatter.roundingTheDouble(product.costOfProduct) - + formatter.displayCurrency(product.costOfProduct); + listOfProducts = listOfProducts + "\n" + product.nameOfProduct + " - " + + formatter.roundingTheDouble(product.costOfProduct) + + formatter.displayCurrency(product.costOfProduct); System.out.println("Товар успешно добавлен."); } - void displayProducts() - { + void displayProducts() { System.out.println("Добавленнные товары:" + listOfProducts); } - double calculateScoreForEachPerson() - { + double calculateScoreForEachPerson() { return totalCost / users; } diff --git a/src/main/java/Formatter.java b/src/main/java/Formatter.java index c180fa41f..69c14dc1e 100644 --- a/src/main/java/Formatter.java +++ b/src/main/java/Formatter.java @@ -1,25 +1,24 @@ public class Formatter { - String roundingTheDouble(double totalCostForEach) - { + String roundingTheDouble(double totalCostForEach) { return String.format("%.2f", totalCostForEach); } - String displayCurrency(double totalCostForEach) - { + String displayCurrency(double totalCostForEach) { String currency; + String standardCurrency = " рублей."; int cost = (int) Math.floor(totalCostForEach); + int preCalcCost = cost % 100; switch (cost % 10) { case 1 -> { - if (cost % 100 == 11) currency = " рублей."; + if (preCalcCost == 11) currency = standardCurrency; else currency = " рубль."; } - case 2, 3, 4 -> - { - if (cost % 100 == 12 || cost % 100 == 13 || cost % 100 == 14) - currency = " рублей."; + case 2, 3, 4 -> { + if (preCalcCost>= 12 && preCalcCost <= 14) + currency = standardCurrency; else currency = " рубля."; } - default -> currency = " рублей."; + default -> currency = standardCurrency; } return currency; } diff --git a/src/main/java/Main.java b/src/main/java/Main.java index b0e6e6ad8..605aa0457 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,12 +1,12 @@ import java.util.InputMismatchException; import java.util.Scanner; + public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); Formatter formatter = new Formatter(); - while (true) - { + while (true) { System.out.println("На скольких человек разделить счёт?"); try { int persons = scanner.nextInt(); @@ -16,44 +16,44 @@ public static void main(String[] args) { else { System.out.println("Успех: корректное число пользователей, можете воспользоваться калькулятором."); Calculator calculator = new Calculator(persons); - while (true) - { + while (true) { System.out.println("Введите название товара:"); - String nameOfProduct = scanner.nextLine(); - - double costOfProduct; - while (true) - { - System.out.println("Введите стоимость товара (Формат: рубли,копейки):"); - try { - costOfProduct = scanner.nextDouble(); - scanner.nextLine(); - if (costOfProduct <= 0.00) { - System.out.println("Ошибка: некорректная цена, введите положительное число."); - } else break; - } - catch (InputMismatchException e) { - System.out.println("Ошибка: недопустимый тип ввода."); - scanner.nextLine(); + String nameOfProduct = scanner.nextLine().trim(); + if (nameOfProduct.isEmpty()) { + System.out.println("Ошибка: некорректная длина названия товара."); + } else { + double costOfProduct; + while (true) { + System.out.println("Введите стоимость товара (Формат: рубли,копейки):"); + try { + costOfProduct = scanner.nextDouble(); + scanner.nextLine(); + if (costOfProduct <= 0.00) { + System.out.println("Ошибка: некорректная цена, введите положительное число."); + } else break; + } catch (InputMismatchException e) { + System.out.println("Ошибка: недопустимый тип ввода."); + scanner.nextLine(); + } } - } - // Можно создавать и добавлять в список новый продукт - Product product = new Product(nameOfProduct, costOfProduct); - calculator.addProduct(product); + // Можно создавать и добавлять в список новый продукт + Product product = new Product(nameOfProduct, costOfProduct); + calculator.addProduct(product); - System.out.println("Добавить ещё товар?"); - String usersAnswer = scanner.nextLine(); - if (usersAnswer.equalsIgnoreCase("завершить")) break; + System.out.println("Добавить ещё товар?"); + String usersAnswer = scanner.nextLine(); + if (usersAnswer.equalsIgnoreCase("завершить")) break; + } } // Вывод результатов пользователю calculator.displayProducts(); + double scoreForEachPerson = calculator.calculateScoreForEachPerson(); System.out.println("Итоговая стоимость: " - + formatter.roundingTheDouble(calculator.calculateScoreForEachPerson()) - + formatter.displayCurrency(calculator.calculateScoreForEachPerson())); + + formatter.roundingTheDouble(scoreForEachPerson) + + formatter.displayCurrency(scoreForEachPerson)); break; } - } - catch (InputMismatchException e) { + } catch (InputMismatchException e) { System.out.println("Ошибка: недопустимый тип ввода. Требуется ввести целое число."); scanner.nextLine(); } diff --git a/src/main/java/Product.java b/src/main/java/Product.java index 63f483023..b779bf834 100644 --- a/src/main/java/Product.java +++ b/src/main/java/Product.java @@ -2,8 +2,7 @@ public class Product { String nameOfProduct; double costOfProduct; - Product(String nameOfProduct, double costOfProduct) - { + Product(String nameOfProduct, double costOfProduct) { this.nameOfProduct = nameOfProduct; this.costOfProduct = costOfProduct; }

AltStyle によって変換されたページ (->オリジナル) /