From 6a49fb60a10543a2630523d1237744b9f68e4138 Mon Sep 17 00:00:00 2001 From: ar1024 Date: Sat, 1 Jun 2024 08:25:19 +0300 Subject: [PATCH 1/6] AR1024 CALCULATOR --- src/main/java/Calculator.java | 127 ++++++++++++++++++++++++++++++++++ src/main/java/Main.java | 27 +++++++- 2 files changed, 152 insertions(+), 2 deletions(-) create mode 100644 src/main/java/Calculator.java diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java new file mode 100644 index 000000000..5d8dfad6e --- /dev/null +++ b/src/main/java/Calculator.java @@ -0,0 +1,127 @@ +import java.util.ArrayList; +import java.util.Scanner; + +public class Calculator { + + + public double start() { + ArrayList feedList = new ArrayList<>(); + System.out.println("Привет!"); + double dolg = 0; // итог калькулятора + // ВВод числа плательщиков + int menCount = skolkoNaroduPlatit(); + //System.out.println("принято. Число оплачивающих: " + menCount); + int i = 0; + Scanner scanner = new Scanner(System.in); + boolean vvod = true; + + double fullPrice = 0; + while (vvod) { + Bludo bludo = new Bludo(); + i++; + System.out.println("Введите название товара № " + i + " или введите 'Завершить': "); + String vvodStr = scanner.nextLine(); + vvodStr.trim(); + double price = 0; + boolean enteredPrice = false; + if (!vvodStr.toLowerCase().equals("завершить")) { + bludo.name = vvodStr; + // System.out.println("принято. товар введен "); + System.out.println("Введите цену [руб].[коп]:"); + + while (true) { + try { + vvodStr = scanner.nextLine(); + price = Double.parseDouble(vvodStr); + break; + } catch (NumberFormatException e) { + System.out.println("неверный ввод, повторите "); + } + } + // System.out.println("неправильный ввод, повторите "); + + if (price > 0) { + bludo.price = price; + fullPrice = fullPrice + price; + System.out.println("сумма введенных товаров: " + fullPrice + " руб."); + enteredPrice = true; + } else System.out.println("введите цену больше 0 "); +// добавление товара в список + feedList.add(bludo); + + } else vvod = false; + + + } + int tovarov = feedList.size(); + + // Итог. Выводим список + if (fullPrice > 0) { + + System.out.println(String.format("Итого: %.2f", fullPrice)); + for (int t = 0; t < tovarov; t++) { + System.out.println("Добавленные товары: " + feedList.get(t).name); + + } + // определим окончание для "рубль" + dolg = fullPrice / menCount; + +// String shablon = "Каждый должен заплатить по: %.2f "+pravilno; +// System.out.println(String.format(shablon, dolg)); + } + return dolg; + } + + public static int skolkoNaroduPlatit() { + boolean notOk = true; + int men = 0; + while (notOk) { + Scanner scanner = new Scanner(System.in); + System.out.println("Сколько человек расплачиваются(2-9)?"); + String strMen = scanner.nextLine(); + + try { + men = Integer.parseInt(strMen.trim()); + if ((men > 1) && (men < 10)) { + + notOk = false; + } else System.out.println("неверное число " + men); + } catch (NumberFormatException nfe) { + System.out.println("неправильный ввод, повторите "); + } + } + return men; + } + + public static String roubleEnd(double itog) { + int roubles = 0; + + roubles = (int) itog; + int rouble = roubles - ((int) roubles / 10) * 10; + + String pravilno = ""; + if (rouble == 1) { + pravilno = "рубль"; + } + ; + if ((rouble == 0) || (rouble > 4)) { + pravilno = "рублей"; + } + ; + if ((rouble > 1) && (rouble < 5)) { + pravilno = "рубля"; + + } + + + ; + return pravilno; + } + + + static class Bludo { + double price; + String name; + } + +} \ No newline at end of file diff --git a/src/main/java/Main.java b/src/main/java/Main.java index db9356a08..491d21ce1 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,6 +1,29 @@ +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Objects; +import java.util.Scanner; +import java.text.DecimalFormat; + public class Main { + public static void main(String[] args) { - System.out.println("Hello world!"); + Calculator calculator; + calculator = new Calculator(); + // Выясняем сколько платить + double PoSkolkoPlatit=calculator.start(); + // выясняем какое окончание у "рубль" + String pravilno= calculator.roubleEnd(PoSkolkoPlatit); + //идем на извращения, дабы поменять точку на запятую. + // функция replace не работает и т.п. тоже не работают + System.out.println("итог: "+PoSkolkoPlatit); + DecimalFormat myFloatFormatter = new DecimalFormat("#.##"); + String dolgStr=myFloatFormatter.format(PoSkolkoPlatit); + int zap=dolgStr.indexOf(","); + String part1=dolgStr.substring(0,zap); + String part2=dolgStr.substring(zap+1,dolgStr.length()); + + // Выводим итог + System.out.println("Каждый должен заплатить по: "+part1+"."+part2+" "+pravilno); } -} \ No newline at end of file +} From a6d126a8c3fd828126f5c47488844656a40effd3 Mon Sep 17 00:00:00 2001 From: ar1024 Date: Sat, 1 Jun 2024 08:37:12 +0300 Subject: [PATCH 2/6] AR1024 CALCULATOR (fix 0 pay) --- src/main/java/Main.java | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 491d21ce1..b1f9b3acc 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -16,14 +16,16 @@ public static void main(String[] args) { String pravilno= calculator.roubleEnd(PoSkolkoPlatit); //идем на извращения, дабы поменять точку на запятую. // функция replace не работает и т.п. тоже не работают - System.out.println("итог: "+PoSkolkoPlatit); - DecimalFormat myFloatFormatter = new DecimalFormat("#.##"); - String dolgStr=myFloatFormatter.format(PoSkolkoPlatit); - int zap=dolgStr.indexOf(","); - String part1=dolgStr.substring(0,zap); - String part2=dolgStr.substring(zap+1,dolgStr.length()); + if (PoSkolkoPlatit>0) { + //System.out.println("итог: " + PoSkolkoPlatit); + DecimalFormat myFloatFormatter = new DecimalFormat("#.##"); + String dolgStr = myFloatFormatter.format(PoSkolkoPlatit); + int zap = dolgStr.indexOf(","); + String part1 = dolgStr.substring(0, zap); + String part2 = dolgStr.substring(zap + 1, dolgStr.length()); - // Выводим итог - System.out.println("Каждый должен заплатить по: "+part1+"."+part2+" "+pravilno); + // Выводим итог + System.out.println("Каждый должен заплатить по: " + part1 + "." + part2 + " " + pravilno); + } } } From 1307e71b32954ea761cafa0fe9e882149035d726 Mon Sep 17 00:00:00 2001 From: ar1024 Date: Sat, 1 Jun 2024 18:11:46 +0300 Subject: [PATCH 3/6] AR1024 ORIGINAL CALCULATOR --- src/main/java/myMain.java | 132 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 132 insertions(+) create mode 100644 src/main/java/myMain.java diff --git a/src/main/java/myMain.java b/src/main/java/myMain.java new file mode 100644 index 000000000..c0624c9a3 --- /dev/null +++ b/src/main/java/myMain.java @@ -0,0 +1,132 @@ +import java.util.Arrays; +import java.util.Scanner; +public class myMain { + + public static void main(String[] args) { + Calculator calculator; + calculator = new Calculator(); + DebtsData data = new DebtsData(); // данные с долгами + Scanner scanner = new Scanner(System.in); + + + System.out.println("Привет, мир отдыхающих! "); + System.out.println("Это альтернативный калькулятор "); + data.people = calculator.skolkoNaroduPlatit(); //число плательщиков + //1. Сумма на всех + double naVseh = 0; + System.out.println("введите сумму, которую надо поделить на всех(0-завершить)?: "); + + while (true) { + try { + String vvodStr = scanner.nextLine(); + naVseh = Double.parseDouble(vvodStr); + break; + } catch (NumberFormatException e) { + System.out.println("неверный ввод, повторите "); + } + } + if (naVseh == 0) return; // выход + double fullSumma=naVseh; + data.fullDebt= data.fullDebt+naVseh; + // double[] itogi = new double[people]; //массив с долгом каждого плательщика + double forEach = naVseh / data.people; + Arrays.fill(data.debt, forEach); // делим поровну сумму на всех + data.printDolgi(); + System.out.println("Теперь у каждого плательщика - номер от 1 до " + data.people); + int i = 1; + boolean fullEnd = false;// маркер окончания ввода + double summa = 0; + while (!fullEnd) { + + while (true) { + System.out.println("Сумма №" + i + ", которую надо поделить на некоторых (0-завершить): "); + String vvodStr = scanner.nextLine(); + summa = 0; + if (vvodStr.equals("0")) { + fullEnd = true; + System.out.println(" введено 0. ");break; + } + else { + try { + summa = Double.parseDouble(vvodStr); + System.out.print(summa); + System.out.println(" введено"); + break; + } catch (NumberFormatException e) { + System.out.println("неверный ввод, повторите "); + + } + } + } + + boolean endVvod = false; // маркер окончания ввода товаров для отдельных плательщиков + int s; + // System.out.println(fullEnd); + while ((!endVvod)&&(!fullEnd)) { // теперь считаем отдельные долги + s = 0; + if (fullEnd) break; // завершаем подсчет ибо введен 0 + System.out.println("на кого делить сумму №" + i + " ("+summa +"), номера плательщиков через запятую (например 1,2,5 или 1-2-5)?: "); + int[] wHoPay4 = new int[10]; //массив с номерами плательщиков + String spisok = scanner.nextLine(); + spisok.trim(); + boolean notWrong = false; + for (int t = 0; t < spisok.length(); t = t + 2) { //поиск плательщиков в строке + + + char numStr = spisok.charAt(t); + int num = numStr - '0'; + try { + + if ((num > 0) && (num < 10)) { + s = s + 1; + wHoPay4[s] = num; + System.out.println("pos" + t + " num " + num); + notWrong=true; + } else { + System.out.println("неверное число " + num); + notWrong = false; + } + } catch (NumberFormatException nfe) { + System.out.println("неправильный ввод, повторите "); + notWrong = false; + } + + } + + + if (notWrong) { + System.out.println("Позиция № " + i + " введена успешно"); + data.fullDebt= data.fullDebt+summa; + double newDolg = summa / s; + System.out.println(String.format("долг по товару %s с плательщиков по %.2f ",i, newDolg)); + System.out.println(String.format("общий долг: %.2f ", data.fullDebt)); + for (int d = 1; d <= s; d++) { + data.debt[wHoPay4[d]] = data.debt[wHoPay4[d]] + newDolg; + //System.out.println(String.format("долг по товару с плательщиков по %.2f ", newDolg)); + endVvod = true; + } + data.printDolgi(); + i++; + } + + } + } + System.out.println(String.format("Итого платить %.2f ", data.fullDebt)); + data.printDolgi(); + + + } + + +} + +class DebtsData{ + double fullDebt; // общий долг + int people; //число плательщиков + double[] debt = new double[10]; // долги + public void printDolgi (){ + for(int i=1;i<=this.people;i++){ + System.out.println(String.format("Плательщик № %S платит %.2f " ,i,this.debt[i])); + } + } +} \ No newline at end of file From f0378b6cbd3f5cc34813c667506213f2f58426e2 Mon Sep 17 00:00:00 2001 From: ar1024 Date: Sat, 1 Jun 2024 18:14:52 +0300 Subject: [PATCH 4/6] AR1024 ORIGINAL CALCULATOR --- src/main/java/README.TXT | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 src/main/java/README.TXT diff --git a/src/main/java/README.TXT b/src/main/java/README.TXT new file mode 100644 index 000000000..102e8fb54 --- /dev/null +++ b/src/main/java/README.TXT @@ -0,0 +1,2 @@ +main - версия для проверки по правилам задания +mymain - моя версия калькулятора \ No newline at end of file From d3646e841dd064d272b4f2106eee92cacb6f06bf Mon Sep 17 00:00:00 2001 From: ar1024 Date: Sat, 1 Jun 2024 18:24:19 +0300 Subject: [PATCH 5/6] AR1024 ORIGINAL CALCULATOR --- src/main/java/Calculator.java | 2 +- src/main/java/Main.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java index 5d8dfad6e..02bad0c4e 100644 --- a/src/main/java/Calculator.java +++ b/src/main/java/Calculator.java @@ -64,7 +64,7 @@ public double start() { } // определим окончание для "рубль" - dolg = fullPrice / menCount; + dolg = fullPrice /(double)menCount; // String shablon = "Каждый должен заплатить по: %.2f "+pravilno; // System.out.println(String.format(shablon, dolg)); diff --git a/src/main/java/Main.java b/src/main/java/Main.java index b1f9b3acc..1af36e05d 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -26,6 +26,7 @@ public static void main(String[] args) { // Выводим итог System.out.println("Каждый должен заплатить по: " + part1 + "." + part2 + " " + pravilno); + } } } From 6e097a23bb7d60db3fc19985bdfe0e0ffb6b2156 Mon Sep 17 00:00:00 2001 From: ar1024 Date: Sun, 2 Jun 2024 14:21:18 +0300 Subject: [PATCH 6/6] AR1024 ORIGINAL CALCULATOR ( 02/06 fix) --- src/main/java/Calculator.java | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java index 02bad0c4e..cf0ddd80a 100644 --- a/src/main/java/Calculator.java +++ b/src/main/java/Calculator.java @@ -28,25 +28,27 @@ public double start() { bludo.name = vvodStr; // System.out.println("принято. товар введен "); System.out.println("Введите цену [руб].[коп]:"); - + price=0; while (true) { try { vvodStr = scanner.nextLine(); price = Double.parseDouble(vvodStr); - break; + if (price > 0) { + bludo.price = price; + fullPrice = fullPrice + price; + System.out.println("Товар '"+bludo.name+"' успешно добавлен на сумму: " + fullPrice + " руб."); + enteredPrice = true;break; + } + else System.out.println("введите цену больше 0 "); + } catch (NumberFormatException e) { - System.out.println("неверный ввод, повторите "); + System.out.println("неверный ввод, повторите "); } - } - // System.out.println("неправильный ввод, повторите "); - - if (price > 0) { - bludo.price = price; - fullPrice = fullPrice + price; - System.out.println("сумма введенных товаров: " + fullPrice + " руб."); - enteredPrice = true; - } else System.out.println("введите цену больше 0 "); + // System.out.println("неправильный ввод, повторите "); + // System.out.print(price);System.out.println(""); + // добавление товара в список + } feedList.add(bludo); } else vvod = false;