From e6fb7daceadc7370de98eb7fa7a7a3c5e7552c3c Mon Sep 17 00:00:00 2001 From: s-buvaka Date: Wed, 30 Nov 2022 22:20:36 +0300 Subject: [PATCH 01/16] Add dev branch --- src/main/java/Main.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index a9198c435..955424e69 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,3 +1,4 @@ +// dev branch for Y.Practicum public class Main { public static void main(String[] args) { From f5c24d9535e91238c861751cd6349c596fac7418 Mon Sep 17 00:00:00 2001 From: oleger2008 Date: Thu, 22 Dec 2022 18:49:12 +0300 Subject: [PATCH 02/16] add product calculator --- src/main/java/ProductCalculator.java | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/ProductCalculator.java diff --git a/src/main/java/ProductCalculator.java b/src/main/java/ProductCalculator.java new file mode 100644 index 000000000..d49b76219 --- /dev/null +++ b/src/main/java/ProductCalculator.java @@ -0,0 +1,21 @@ +import java.util.Vector; + +public class ProductCalculator { + private double totalCost_ = 0.; + private final Vector products_ = new Vector<>(); + + public void addProduct(String name, double price) { + products_.add(name); + totalCost_ += price; + } + + public void printAllProducts() { + for (String product : products_) { + System.out.println(product); + } + } + + public double getTotalCost() { + return totalCost_; + } +} From 021685642f4f1ee0de15aa2d0ba2063c05b552f8 Mon Sep 17 00:00:00 2001 From: oleger2008 Date: Thu, 22 Dec 2022 18:50:15 +0300 Subject: [PATCH 03/16] add first part of task program asks to enter people amount for score --- src/main/java/Main.java | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 955424e69..39f0f667c 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,9 +1,14 @@ -// dev branch for Y.Practicum +import java.util.Scanner; + public class Main { public static void main(String[] args) { - // ваш код начнется здесь - // вы не должны ограничиваться только классом Main и можете создавать свои классы по необходимости - System.out.println("Привет Мир"); + System.out.println("Введи на сколько человек нужно разделить счёт:"); + Scanner scanner = new Scanner(System.in); + int peopleAmount = scanner.nextInt(); + while (peopleAmount < 1) { + System.out.println("Введите корректное количество человек:"); + peopleAmount = scanner.nextInt(); + } } } From 60da4b09272d6d54ac81eb8513a25ca86b3646d1 Mon Sep 17 00:00:00 2001 From: oleger2008 Date: Thu, 22 Dec 2022 19:32:12 +0300 Subject: [PATCH 04/16] add class Product --- src/main/java/Product.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/Product.java diff --git a/src/main/java/Product.java b/src/main/java/Product.java new file mode 100644 index 000000000..894a3d3cb --- /dev/null +++ b/src/main/java/Product.java @@ -0,0 +1,17 @@ +public class Product { + private String name_; + private double price_; + + Product(String name, double price) { + name_ = name; + price_ = price; + } + + public String getName() { + return name_; + } + + public double getPrice() { + return price_; + } +} From 4ab931176e9d10afd829118757c6ba84d021dcc6 Mon Sep 17 00:00:00 2001 From: oleger2008 Date: Thu, 22 Dec 2022 19:32:44 +0300 Subject: [PATCH 05/16] make vector of products --- src/main/java/ProductCalculator.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/main/java/ProductCalculator.java b/src/main/java/ProductCalculator.java index d49b76219..de5923f6d 100644 --- a/src/main/java/ProductCalculator.java +++ b/src/main/java/ProductCalculator.java @@ -2,16 +2,16 @@ public class ProductCalculator { private double totalCost_ = 0.; - private final Vector products_ = new Vector<>(); + private Vector products_ = new Vector<>(); - public void addProduct(String name, double price) { - products_.add(name); - totalCost_ += price; + public void addProduct(Product product) { + products_.add(product); + totalCost_ += product.getPrice(); } public void printAllProducts() { - for (String product : products_) { - System.out.println(product); + for (Product product : products_) { + System.out.println(product.getName()); } } From 50ef39f13afb1b26b54a367446208a6fd4f8a5db Mon Sep 17 00:00:00 2001 From: oleger2008 Date: Thu, 22 Dec 2022 19:33:20 +0300 Subject: [PATCH 06/16] add code for whole task --- src/main/java/Main.java | 41 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 39f0f667c..bb7dde3ff 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,14 +1,51 @@ import java.util.Scanner; public class Main { + private static Scanner scanner = new Scanner(System.in); public static void main(String[] args) { - System.out.println("Введи на сколько человек нужно разделить счёт:"); - Scanner scanner = new Scanner(System.in); + System.out.println("Введите на сколько человек нужно разделить счёт:"); + int peopleAmount = readPeopleAmount(); + + ProductCalculator calculator = new ProductCalculator(); + String command = ""; + final String endCommand = "завершить"; + while (!endCommand.equalsIgnoreCase(command)) { + calculator.addProduct(readProduct()); + System.out.println("Напишите слово \"Завершить\" для завершения добавления товаров"); + command = scanner.next(); + } + + System.out.println("Добавленные товары:"); + calculator.printAllProducts(); + printAveragePrice(calculator.getTotalCost(), peopleAmount); + } + + public static int readPeopleAmount() { int peopleAmount = scanner.nextInt(); while (peopleAmount < 1) { System.out.println("Введите корректное количество человек:"); peopleAmount = scanner.nextInt(); } + return peopleAmount; + } + + public static Product readProduct() { + System.out.println("Введите название товара, который хотите добавить:"); + String productName = scanner.next(); + System.out.println("Введите стоимость этого товара:"); + double price = scanner.nextDouble(); + while (price < 0.) { + System.out.println("Введите корректное значение цены товара: " + productName); + price = scanner.nextDouble(); + } + return new Product(productName, price); + } + + public static void printAveragePrice(double totalCost, int peopleAmount) { + double avgPrice = totalCost / peopleAmount; + System.out.println("Каждый должен заплатить по:"); + String rubleWord = (Math.floor(avgPrice) == 1.) ? "рубль" : "рубля"; + System.out.println(String.format("%.2f %s", avgPrice, rubleWord)); } } From 9de46a144672c873339f83105596de0042867c6d Mon Sep 17 00:00:00 2001 From: oleger2008 Date: Thu, 22 Dec 2022 19:43:03 +0300 Subject: [PATCH 07/16] edit msg for reenter product cost --- src/main/java/Main.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index bb7dde3ff..6f03654a1 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -12,7 +12,8 @@ public static void main(String[] args) { final String endCommand = "завершить"; while (!endCommand.equalsIgnoreCase(command)) { calculator.addProduct(readProduct()); - System.out.println("Напишите слово \"Завершить\" для завершения добавления товаров"); + System.out.println("Если хотите завершить добавление товаров, то введите слово" + + "\"Завершить\".\n В противном случае введите, что угодно."); command = scanner.next(); } @@ -36,7 +37,7 @@ public static Product readProduct() { System.out.println("Введите стоимость этого товара:"); double price = scanner.nextDouble(); while (price < 0.) { - System.out.println("Введите корректное значение цены товара: " + productName); + System.out.println("Введите корректное значение цены товара '" + productName + "':"); price = scanner.nextDouble(); } return new Product(productName, price); From 1cf94a0b2f575d89f0bab7024c46f1420ef8e5a8 Mon Sep 17 00:00:00 2001 From: oleger2008 Date: Thu, 22 Dec 2022 20:45:33 +0300 Subject: [PATCH 08/16] edit readPeopleAmount() method --- src/main/java/Main.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 6f03654a1..d7773fcb3 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -23,12 +23,20 @@ public static void main(String[] args) { } public static int readPeopleAmount() { - int peopleAmount = scanner.nextInt(); - while (peopleAmount < 1) { + int amount = 0; + final int minPeopleAmount = 1; + while (true) { + String input = scanner.nextLine(); + try { + amount = Integer.parseInt(input); + if (amount >= minPeopleAmount) { + break; + } + } catch (NumberFormatException | NullPointerException ignored) { + } System.out.println("Введите корректное количество человек:"); - peopleAmount = scanner.nextInt(); } - return peopleAmount; + return amount; } public static Product readProduct() { From f25239bd127b84612d3bac450055b9e100f510a6 Mon Sep 17 00:00:00 2001 From: oleger2008 Date: Thu, 22 Dec 2022 20:45:48 +0300 Subject: [PATCH 09/16] edit readProduct() method --- src/main/java/Main.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index d7773fcb3..f28531a3f 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -41,12 +41,19 @@ public static int readPeopleAmount() { public static Product readProduct() { System.out.println("Введите название товара, который хотите добавить:"); - String productName = scanner.next(); + String productName = scanner.nextLine(); System.out.println("Введите стоимость этого товара:"); - double price = scanner.nextDouble(); - while (price < 0.) { + double price = 0.; + while (true) { + String input = scanner.nextLine(); + try { + price = Double.parseDouble(input); + if (price > 0.) { + break; + } + } catch (NumberFormatException | NullPointerException ignored) { + } System.out.println("Введите корректное значение цены товара '" + productName + "':"); - price = scanner.nextDouble(); } return new Product(productName, price); } From 588aa12c5a9d8bb4faea9283605e48fe9ed7d6a8 Mon Sep 17 00:00:00 2001 From: oleger2008 Date: Thu, 22 Dec 2022 20:46:04 +0300 Subject: [PATCH 10/16] add getRubleWordByNum() method --- src/main/java/Main.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index f28531a3f..d6350273a 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -61,7 +61,17 @@ public static Product readProduct() { public static void printAveragePrice(double totalCost, int peopleAmount) { double avgPrice = totalCost / peopleAmount; System.out.println("Каждый должен заплатить по:"); - String rubleWord = (Math.floor(avgPrice) == 1.) ? "рубль" : "рубля"; + String rubleWord = getRubleWordByNum(avgPrice); System.out.println(String.format("%.2f %s", avgPrice, rubleWord)); } + + public static String getRubleWordByNum(double rubles) { + int roundedRubles = ((int) Math.floor(rubles)); + final int decimalBase = 10; + final int hundredBase = 100; + if (((roundedRubles % hundredBase) == 11) || ((roundedRubles % decimalBase) != 1)) { + return "рублей"; + } + return "рубль"; + } } From dcfa9dbb97d3ae42d118d1695911ad2d02d6a0b3 Mon Sep 17 00:00:00 2001 From: oleger2008 Date: Thu, 22 Dec 2022 20:46:36 +0300 Subject: [PATCH 11/16] edit end command waiter --- src/main/java/Main.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index d6350273a..d47bcaba9 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -12,9 +12,9 @@ public static void main(String[] args) { final String endCommand = "завершить"; while (!endCommand.equalsIgnoreCase(command)) { calculator.addProduct(readProduct()); - System.out.println("Если хотите завершить добавление товаров, то введите слово" + + System.out.println("Если хотите завершить добавление товаров, то введите слово " + "\"Завершить\".\n В противном случае введите, что угодно."); - command = scanner.next(); + command = scanner.nextLine(); } System.out.println("Добавленные товары:"); From c12b5aa1f8b5e60eca88dd59256ce65c104ab28b Mon Sep 17 00:00:00 2001 From: oleger2008 Date: Thu, 22 Dec 2022 21:00:41 +0300 Subject: [PATCH 12/16] edit storing products don't have to store products at all. can store only their names. --- src/main/java/ProductCalculator.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/ProductCalculator.java b/src/main/java/ProductCalculator.java index de5923f6d..81f67b3c9 100644 --- a/src/main/java/ProductCalculator.java +++ b/src/main/java/ProductCalculator.java @@ -2,16 +2,16 @@ public class ProductCalculator { private double totalCost_ = 0.; - private Vector products_ = new Vector<>(); + private Vector products_ = new Vector<>(); public void addProduct(Product product) { - products_.add(product); + products_.add(product.getName()); totalCost_ += product.getPrice(); } public void printAllProducts() { - for (Product product : products_) { - System.out.println(product.getName()); + for (String product : products_) { + System.out.println(product); } } From 6a0bb30bbe4f751543ab862ffc279e6906687a2c Mon Sep 17 00:00:00 2001 From: oleger2008 Date: Thu, 22 Dec 2022 21:05:22 +0300 Subject: [PATCH 13/16] add linebreak in output for avg sum --- src/main/java/Main.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index d47bcaba9..1d849376b 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -60,7 +60,7 @@ public static Product readProduct() { public static void printAveragePrice(double totalCost, int peopleAmount) { double avgPrice = totalCost / peopleAmount; - System.out.println("Каждый должен заплатить по:"); + System.out.println("\nКаждый должен заплатить по:"); String rubleWord = getRubleWordByNum(avgPrice); System.out.println(String.format("%.2f %s", avgPrice, rubleWord)); } From 1f695d016904c0925830d241bc21b8d79bdbe36f Mon Sep 17 00:00:00 2001 From: oleger2008 Date: Fri, 23 Dec 2022 20:48:42 +0300 Subject: [PATCH 14/16] changed container for products names --- src/main/java/ProductCalculator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ProductCalculator.java b/src/main/java/ProductCalculator.java index 81f67b3c9..40f501f9d 100644 --- a/src/main/java/ProductCalculator.java +++ b/src/main/java/ProductCalculator.java @@ -1,8 +1,8 @@ -import java.util.Vector; +import java.util.ArrayList; public class ProductCalculator { private double totalCost_ = 0.; - private Vector products_ = new Vector<>(); + private ArrayList products_ = new ArrayList<>(); public void addProduct(Product product) { products_.add(product.getName()); From dfc1d0ecad87de87999df8413bccc4630b008a0a Mon Sep 17 00:00:00 2001 From: oleger2008 Date: Fri, 23 Dec 2022 21:08:14 +0300 Subject: [PATCH 15/16] make methods and fields static --- src/main/java/Main.java | 7 +++---- src/main/java/ProductCalculator.java | 10 +++++----- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 1d849376b..c38aaa2b6 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -7,19 +7,18 @@ public static void main(String[] args) { System.out.println("Введите на сколько человек нужно разделить счёт:"); int peopleAmount = readPeopleAmount(); - ProductCalculator calculator = new ProductCalculator(); String command = ""; final String endCommand = "завершить"; while (!endCommand.equalsIgnoreCase(command)) { - calculator.addProduct(readProduct()); + ProductCalculator.addProduct(readProduct()); System.out.println("Если хотите завершить добавление товаров, то введите слово " + "\"Завершить\".\n В противном случае введите, что угодно."); command = scanner.nextLine(); } System.out.println("Добавленные товары:"); - calculator.printAllProducts(); - printAveragePrice(calculator.getTotalCost(), peopleAmount); + ProductCalculator.printAllProducts(); + printAveragePrice(ProductCalculator.getTotalCost(), peopleAmount); } public static int readPeopleAmount() { diff --git a/src/main/java/ProductCalculator.java b/src/main/java/ProductCalculator.java index 40f501f9d..de37a31e3 100644 --- a/src/main/java/ProductCalculator.java +++ b/src/main/java/ProductCalculator.java @@ -1,21 +1,21 @@ import java.util.ArrayList; public class ProductCalculator { - private double totalCost_ = 0.; - private ArrayList products_ = new ArrayList<>(); + private static double totalCost_ = 0.; + private static ArrayList products_ = new ArrayList<>(); - public void addProduct(Product product) { + public static void addProduct(Product product) { products_.add(product.getName()); totalCost_ += product.getPrice(); } - public void printAllProducts() { + public static void printAllProducts() { for (String product : products_) { System.out.println(product); } } - public double getTotalCost() { + public static double getTotalCost() { return totalCost_; } } From 74234a626644bd76a2c97dfcd4e516225fff164b Mon Sep 17 00:00:00 2001 From: oleger2008 Date: Fri, 23 Dec 2022 21:08:59 +0300 Subject: [PATCH 16/16] fix method for getting ruble word --- src/main/java/Main.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index c38aaa2b6..4ee1298d7 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -66,11 +66,20 @@ public static void printAveragePrice(double totalCost, int peopleAmount) { public static String getRubleWordByNum(double rubles) { int roundedRubles = ((int) Math.floor(rubles)); - final int decimalBase = 10; - final int hundredBase = 100; - if (((roundedRubles % hundredBase) == 11) || ((roundedRubles % decimalBase) != 1)) { - return "рублей"; + final int divHundredReminder = roundedRubles % 100; + final int divTenReminder = roundedRubles % 10; + if (!InRange(divHundredReminder, 11, 14)) { + if (InRange(divTenReminder, 2, 4)) { + return "рубля"; + } + if (divTenReminder == 1) { + return "рубль"; + } } - return "рубль"; + return "рублей"; + } + + public static boolean InRange(int value, int lower, int upper) { + return ((lower <= value) && (value <= upper)); } }