From 3b0ea9a76a23572685630946b3fc66b59ef11212 Mon Sep 17 00:00:00 2001 From: Igor Avdonin Date: 2023年4月11日 10:48:00 +0300 Subject: [PATCH 1/4] Init commit --- src/main/java/Main.java | 163 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 162 insertions(+), 1 deletion(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index db9356a08..b2137d0e1 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,6 +1,167 @@ +import java.util.Locale; +import java.util.Scanner; public class Main { public static void main(String[] args) { - System.out.println("Hello world!"); + Calculator calculator = new Calculator(); + + calculator.friends.addItems(); // Добавление количества друзей + calculator.products.addItems(); // Добавление товаров + if (calculator.products.prodCost==0.0d){ + return; + } + calculator.outString(); // Вывод результатов + } +} +class Calculator{ + Friends friends; + Products products; + Formatter formatter; + Calculator(){ + this.formatter = new Formatter(); + this.friends = new Friends(); + this.products = new Products(this.formatter); + } + void outString(){ + System.out.println("Добавленные товары:"); + System.out.println(this.products.prodNames); + System.out.print("Итоговая сумма равна: "); + System.out.println(this.formatter.rubFullFormat(this.products.prodCost)); + System.out.print("Сумма, которую должен заплатить каждый, равна: "); + System.out.println(this.formatter.rubFullFormat((this.products.prodCost / this.friends.friendsCount))); + // Если сумма не делится без остатка + double d = checkBalance(); + if(!(d == 0.0d)){ + System.out.print("И " + this.formatter.rubFullFormat(d) + ", кто то должен добавить."); + } + } + double checkBalance(){ + double d = (this.products.prodCost / this.friends.friendsCount) * 100; + d = Math.round(d); + d = d/100; + return (this.products.prodCost - this.friends.friendsCount * d); + } +} + +class Friends{ + int friendsCount; + void addItems(){ + Scanner scanner = new Scanner(System.in); + System.out.println("На скольких человек необходимо разделить счёт?"); + while(true) { + if(addFriend(scanner)){ + break; + } + } + } + boolean addFriend(Scanner scanner){ + if(!checkFormat(scanner)){ + System.out.println("Нужно указать число."); + scanner.next(); + return false; + } + int friendsCount = scanner.nextInt(); + if(!checkCount(friendsCount)){ + System.out.println("Укажите количество больше одного"); + return false; + } + this.friendsCount = friendsCount; + return true; + } + boolean checkFormat(Scanner scanner){ + return scanner.hasNextInt(); + } + boolean checkCount(int friendsCount){ + return friendsCount> 1; + } +} + +class Products{ + String prodNames = ""; + Double prodCost = 0.0; + Formatter formatter; + Products(Formatter formatter){ + this.formatter = formatter; + } + void addItems(){ + int count = 0; + Scanner scanner = new Scanner(System.in); + while(true) { + count++; + // Добавляем имя товара + System.out.println("Для добавления нового товара введите название! Для завершения, введите \"Завершить\"."); + if(!addName(scanner, count)) { + break; + } + // Добавляем цену товара + System.out.println("Введите цену в формате \"рубли.копейки\"."); + addCost(scanner); + + System.out.println("Товар добавлен.\n"); + } + } + boolean addName(Scanner scanner, int count){ // Добавление имени товара + String prodName = scanner.next(); + if(checkName(prodName)) { + String format = "%d. %s"; // Символ переноса строки в методе addCost() + this.prodNames = this.prodNames + String.format(format, count, prodName); + return true; + }else{ + return false; + } + } + void addCost(Scanner scanner){ // Добавление стоимости товара + scanner.useLocale(Locale.ENGLISH); + double prodCost; + while(true){ + if(checkFormat(scanner)){ + prodCost = scanner.nextDouble(); + if(checkPositive(prodCost)){ + break; + } + }else{ + scanner.next(); + } + System.out.println("Ошибка. Введите цену в формате \"рубли.копейки\"."); + } + + this.prodNames = this.prodNames + " - " + this.formatter.rubFullFormat(prodCost) + "\n"; // Вывод суммы товара для наглядности + this.prodCost = this.prodCost + prodCost; + } + boolean checkName(String name){ // Проверка введенного слова + String constEnd = "завершить"; + return !constEnd.equalsIgnoreCase(name); + } + boolean checkFormat(Scanner scanner){ + return scanner.hasNextDouble(); + } + boolean checkPositive(double prodCost){ + return prodCost> 0; + } +} + +class Formatter{ + String rubFullFormat(double d){ // Вывод отформатирвоанной суммы в рублях + return rubCostFormat(d) + " " + rubNameFormat(d); + } + String rubCostFormat(double d){ // Формат суммы + String format = "%.2f"; + return String.format(Locale.ENGLISH, format, d); + } + String rubNameFormat(double d){ // Склонение валюты + String rubI = "Рубль"; + String rubM = "Рублей"; + String rubS = "Рубля"; + d = Math.floor(d); + int mod = (int)(d % 100); + int div = (mod / 10); + int res = (mod> 19) ? (mod - div * 10) : mod; + if(res==1){ + return rubI; + }else if(res < 5 && res> 1){ + return rubS; + }else{ + return rubM; + } } } \ No newline at end of file From efa505a9c93d7f22fe72e8978ed60ef19c560ed1 Mon Sep 17 00:00:00 2001 From: madj0ng Date: 2023年8月29日 23:02:05 +0300 Subject: [PATCH 2/4] Init commit --- src/main/java/Calculator.java | 32 +++++++ src/main/java/Formatter.java | 29 +++++++ src/main/java/Friends.java | 38 +++++++++ src/main/java/Main.java | 155 ---------------------------------- src/main/java/Products.java | 73 ++++++++++++++++ 5 files changed, 172 insertions(+), 155 deletions(-) create mode 100644 src/main/java/Calculator.java create mode 100644 src/main/java/Formatter.java create mode 100644 src/main/java/Friends.java create mode 100644 src/main/java/Products.java diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java new file mode 100644 index 000000000..5de1c8e6c --- /dev/null +++ b/src/main/java/Calculator.java @@ -0,0 +1,32 @@ +public class Calculator { + Friends friends; + Products products; + Formatter formatter; + + Calculator() { + this.formatter = new Formatter(); + this.friends = new Friends(); + this.products = new Products(this.formatter); + } + + void outString() { + System.out.println("Добавленные товары:"); + System.out.println(this.products.prodNames); + System.out.print("Итоговая сумма равна: "); + System.out.println(this.formatter.rubFullFormat(this.products.prodCost)); + System.out.print("Сумма, которую должен заплатить каждый, равна: "); + System.out.println(this.formatter.rubFullFormat((this.products.prodCost / this.friends.friendsCount))); + // Если сумма не делится без остатка + double d = checkBalance(); + if (!(d == 0.0d)) { + System.out.print("И " + this.formatter.rubFullFormat(d) + ", кто то должен добавить."); + } + } + + double checkBalance() { + double d = (this.products.prodCost / this.friends.friendsCount) * 100; + d = Math.round(d); + d = d / 100; + return (this.products.prodCost - this.friends.friendsCount * d); + } +} diff --git a/src/main/java/Formatter.java b/src/main/java/Formatter.java new file mode 100644 index 000000000..583398629 --- /dev/null +++ b/src/main/java/Formatter.java @@ -0,0 +1,29 @@ +import java.util.Locale; + +public class Formatter { + String rubFullFormat(double d) { // Вывод отформатирвоанной суммы в рублях + return rubCostFormat(d) + " " + rubNameFormat(d); + } + + String rubCostFormat(double d) { // Формат суммы + String format = "%.2f"; + return String.format(Locale.ENGLISH, format, d); + } + + String rubNameFormat(double d) { // Склонение валюты + String rubI = "Рубль"; + String rubM = "Рублей"; + String rubS = "Рубля"; + d = Math.floor(d); + int mod = (int) (d % 100); + int div = (mod / 10); + int res = (mod> 19) ? (mod - div * 10) : mod; + if (res == 1) { + return rubI; + } else if (res < 5 && res> 1) { + return rubS; + } else { + return rubM; + } + } +} diff --git a/src/main/java/Friends.java b/src/main/java/Friends.java new file mode 100644 index 000000000..f7441c4b6 --- /dev/null +++ b/src/main/java/Friends.java @@ -0,0 +1,38 @@ +import java.util.Scanner; + +public class Friends { + int friendsCount; + + void addItems() { + Scanner scanner = new Scanner(System.in); + System.out.println("На скольких человек необходимо разделить счёт?"); + while (true) { + if (addFriend(scanner)) { + break; + } + } + } + + boolean addFriend(Scanner scanner) { + if (!checkFormat(scanner)) { + System.out.println("Нужно указать число."); + scanner.next(); + return false; + } + int friendsCount = scanner.nextInt(); + if (!checkCount(friendsCount)) { + System.out.println("Укажите количество больше одного"); + return false; + } + this.friendsCount = friendsCount; + return true; + } + + boolean checkFormat(Scanner scanner) { + return scanner.hasNextInt(); + } + + boolean checkCount(int friendsCount) { + return friendsCount> 1; + } +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java index b2137d0e1..3fb2fc1ce 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,6 +1,3 @@ -import java.util.Locale; -import java.util.Scanner; - public class Main { public static void main(String[] args) { Calculator calculator = new Calculator(); @@ -12,156 +9,4 @@ public static void main(String[] args) { } calculator.outString(); // Вывод результатов } -} -class Calculator{ - Friends friends; - Products products; - Formatter formatter; - Calculator(){ - this.formatter = new Formatter(); - this.friends = new Friends(); - this.products = new Products(this.formatter); - } - void outString(){ - System.out.println("Добавленные товары:"); - System.out.println(this.products.prodNames); - System.out.print("Итоговая сумма равна: "); - System.out.println(this.formatter.rubFullFormat(this.products.prodCost)); - System.out.print("Сумма, которую должен заплатить каждый, равна: "); - System.out.println(this.formatter.rubFullFormat((this.products.prodCost / this.friends.friendsCount))); - // Если сумма не делится без остатка - double d = checkBalance(); - if(!(d == 0.0d)){ - System.out.print("И " + this.formatter.rubFullFormat(d) + ", кто то должен добавить."); - } - } - double checkBalance(){ - double d = (this.products.prodCost / this.friends.friendsCount) * 100; - d = Math.round(d); - d = d/100; - return (this.products.prodCost - this.friends.friendsCount * d); - } -} - -class Friends{ - int friendsCount; - void addItems(){ - Scanner scanner = new Scanner(System.in); - System.out.println("На скольких человек необходимо разделить счёт?"); - while(true) { - if(addFriend(scanner)){ - break; - } - } - } - boolean addFriend(Scanner scanner){ - if(!checkFormat(scanner)){ - System.out.println("Нужно указать число."); - scanner.next(); - return false; - } - int friendsCount = scanner.nextInt(); - if(!checkCount(friendsCount)){ - System.out.println("Укажите количество больше одного"); - return false; - } - this.friendsCount = friendsCount; - return true; - } - boolean checkFormat(Scanner scanner){ - return scanner.hasNextInt(); - } - boolean checkCount(int friendsCount){ - return friendsCount> 1; - } -} - -class Products{ - String prodNames = ""; - Double prodCost = 0.0; - Formatter formatter; - Products(Formatter formatter){ - this.formatter = formatter; - } - void addItems(){ - int count = 0; - Scanner scanner = new Scanner(System.in); - while(true) { - count++; - // Добавляем имя товара - System.out.println("Для добавления нового товара введите название! Для завершения, введите \"Завершить\"."); - if(!addName(scanner, count)) { - break; - } - // Добавляем цену товара - System.out.println("Введите цену в формате \"рубли.копейки\"."); - addCost(scanner); - - System.out.println("Товар добавлен.\n"); - } - } - boolean addName(Scanner scanner, int count){ // Добавление имени товара - String prodName = scanner.next(); - if(checkName(prodName)) { - String format = "%d. %s"; // Символ переноса строки в методе addCost() - this.prodNames = this.prodNames + String.format(format, count, prodName); - return true; - }else{ - return false; - } - } - void addCost(Scanner scanner){ // Добавление стоимости товара - scanner.useLocale(Locale.ENGLISH); - double prodCost; - while(true){ - if(checkFormat(scanner)){ - prodCost = scanner.nextDouble(); - if(checkPositive(prodCost)){ - break; - } - }else{ - scanner.next(); - } - System.out.println("Ошибка. Введите цену в формате \"рубли.копейки\"."); - } - - this.prodNames = this.prodNames + " - " + this.formatter.rubFullFormat(prodCost) + "\n"; // Вывод суммы товара для наглядности - this.prodCost = this.prodCost + prodCost; - } - boolean checkName(String name){ // Проверка введенного слова - String constEnd = "завершить"; - return !constEnd.equalsIgnoreCase(name); - } - boolean checkFormat(Scanner scanner){ - return scanner.hasNextDouble(); - } - boolean checkPositive(double prodCost){ - return prodCost> 0; - } -} - -class Formatter{ - String rubFullFormat(double d){ // Вывод отформатирвоанной суммы в рублях - return rubCostFormat(d) + " " + rubNameFormat(d); - } - String rubCostFormat(double d){ // Формат суммы - String format = "%.2f"; - return String.format(Locale.ENGLISH, format, d); - } - String rubNameFormat(double d){ // Склонение валюты - String rubI = "Рубль"; - String rubM = "Рублей"; - String rubS = "Рубля"; - d = Math.floor(d); - int mod = (int)(d % 100); - int div = (mod / 10); - int res = (mod> 19) ? (mod - div * 10) : mod; - if(res==1){ - return rubI; - }else if(res < 5 && res> 1){ - return rubS; - }else{ - return rubM; - } - } } \ No newline at end of file diff --git a/src/main/java/Products.java b/src/main/java/Products.java new file mode 100644 index 000000000..c6ca0726e --- /dev/null +++ b/src/main/java/Products.java @@ -0,0 +1,73 @@ +import java.util.Locale; +import java.util.Scanner; + +public class Products { + String prodNames = ""; + Double prodCost = 0.0; + Formatter formatter; + + Products(Formatter formatter) { + this.formatter = formatter; + } + + void addItems() { + int count = 0; + Scanner scanner = new Scanner(System.in); + while (true) { + count++; + // Добавляем имя товара + System.out.println("Для добавления нового товара введите название! Для завершения, введите \"Завершить\"."); + if (!addName(scanner, count)) { + break; + } + // Добавляем цену товара + System.out.println("Введите цену в формате \"рубли.копейки\"."); + addCost(scanner); + + System.out.println("Товар добавлен.\n"); + } + } + + boolean addName(Scanner scanner, int count) { // Добавление имени товара + String prodName = scanner.next(); + if (checkName(prodName)) { + String format = "%d. %s"; // Символ переноса строки в методе addCost() + this.prodNames = this.prodNames + String.format(format, count, prodName); + return true; + } else { + return false; + } + } + + void addCost(Scanner scanner) { // Добавление стоимости товара + scanner.useLocale(Locale.ENGLISH); + double prodCost; + while (true) { + if (checkFormat(scanner)) { + prodCost = scanner.nextDouble(); + if (checkPositive(prodCost)) { + break; + } + } else { + scanner.next(); + } + System.out.println("Ошибка. Введите цену в формате \"рубли.копейки\"."); + } + + this.prodNames = this.prodNames + " - " + this.formatter.rubFullFormat(prodCost) + "\n"; // Вывод суммы товара для наглядности + this.prodCost = this.prodCost + prodCost; + } + + boolean checkName(String name) { // Проверка введенного слова + String constEnd = "завершить"; + return !constEnd.equalsIgnoreCase(name); + } + + boolean checkFormat(Scanner scanner) { + return scanner.hasNextDouble(); + } + + boolean checkPositive(double prodCost) { + return prodCost> 0; + } +} From c0dff769a87d2832bdef7759c64e3fcc854f48ac Mon Sep 17 00:00:00 2001 From: madj0ng Date: 2023年8月29日 23:07:54 +0300 Subject: [PATCH 3/4] Init commit --- src/main/java/Formatter.java | 25 ++++++++++++------------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/src/main/java/Formatter.java b/src/main/java/Formatter.java index 583398629..139792ed6 100644 --- a/src/main/java/Formatter.java +++ b/src/main/java/Formatter.java @@ -1,7 +1,7 @@ import java.util.Locale; public class Formatter { - String rubFullFormat(double d) { // Вывод отформатирвоанной суммы в рублях + String rubFullFormat(double d) { // Вывод отформатированной суммы в рублях return rubCostFormat(d) + " " + rubNameFormat(d); } @@ -11,19 +11,18 @@ String rubCostFormat(double d) { // Формат суммы } String rubNameFormat(double d) { // Склонение валюты - String rubI = "Рубль"; - String rubM = "Рублей"; - String rubS = "Рубля"; - d = Math.floor(d); + String[] rubForms = {"рубль", "рублей", "рубля"}; int mod = (int) (d % 100); - int div = (mod / 10); - int res = (mod> 19) ? (mod - div * 10) : mod; - if (res == 1) { - return rubI; - } else if (res < 5 && res> 1) { - return rubS; - } else { - return rubM; + int res = (mod> 19) ? (mod % 10) : mod; + switch (res) { + case 1: + return rubForms[0]; + case 2: + case 3: + case 4: + return rubForms[2]; + default: + return rubForms[1]; } } } From 59a257176d0cdf7624f61c01c94b2f64b1d00d30 Mon Sep 17 00:00:00 2001 From: madj0ng Date: 2023年8月29日 23:41:59 +0300 Subject: [PATCH 4/4] Init commit --- src/main/java/Calculator.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java index 5de1c8e6c..4c6c0f902 100644 --- a/src/main/java/Calculator.java +++ b/src/main/java/Calculator.java @@ -18,7 +18,9 @@ void outString() { System.out.println(this.formatter.rubFullFormat((this.products.prodCost / this.friends.friendsCount))); // Если сумма не делится без остатка double d = checkBalance(); - if (!(d == 0.0d)) { + if (d<0.0d){ + System.out.print("И " + this.formatter.rubFullFormat(Math.abs(d)) + ", кто то может не платить."); + }else if(d>0.0d){ System.out.print("И " + this.formatter.rubFullFormat(d) + ", кто то должен добавить."); } }

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