From 2a21c7b180da23f0d1c0f01f00e4f89282eb6044 Mon Sep 17 00:00:00 2001 From: Zedd3d Date: 2023年4月15日 01:40:13 +0200 Subject: [PATCH 1/2] =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D1=8B=D0=B9=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BC=D0=BC=D0=B8=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Calculator.java | 35 ++++++++++++++++ src/main/java/Main.java | 77 +++++++++++++++++++++++++++++++++- src/main/java/ReceiptLine.java | 46 ++++++++++++++++++++ 3 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 src/main/java/Calculator.java create mode 100644 src/main/java/ReceiptLine.java diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java new file mode 100644 index 000000000..d7e8d0463 --- /dev/null +++ b/src/main/java/Calculator.java @@ -0,0 +1,35 @@ +public class Calculator { + public double calculate(int pplCount,double amountReceipt){ + double result = amountReceipt/(double) pplCount; + + return mathFloor(result); + } + + public double conversionSum(double price){ + return mathFloor(price); + } + + double mathFloor(double sum){ + return Math.floor(100*sum)/100.0; + } + + public String formatSum(double price){ + String partOfPrice = (""+((int) price)); + partOfPrice = partOfPrice.substring(partOfPrice.length()-1); + String nameRub = ""; + switch (partOfPrice){ + case "1": + nameRub = "рубль"; + break; + case "2": + case "3": + case "4": + nameRub = "рубля"; + break; + default: + nameRub = "рублей"; + } + return String.format("%.2f %s",price, nameRub); + } + +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java index db9356a08..c3f885733 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,6 +1,81 @@ +import java.util.Scanner; public class Main { public static void main(String[] args) { - System.out.println("Hello world!"); + Scanner scanner = new Scanner(System.in); + int pplCount = 0; + String goodsLine = ""; + double amountReceipt = 0; + + System.out.println("Привет. Это твой \"калькулятор разделения счёта на всех\". На сколько человек сегодня делим счёт?"); + do { + try{ + pplCount = Integer.valueOf(scanner.next()); + + if (pplCount==1) { + System.out.println("Для одного человека делить счёт смысла нет :) всё же сколько вас было?"); + }else if (pplCount<=1) { + System.out.println("" + pplCount + " ? серьёзно? Мне кажется я знаю список товаров;) Давай всё же по новой. Сколько вас было ?!"); + } + + } catch (Exception e){ + System.out.println("Что-то пошло не так, давай ещё раз попробуем =/ Нужно целое число"); + } + + }while (!(pplCount>1)); + + System.out.println("Итак вас было "+pplCount); + + System.out.println("Сейчас сделаю побыстрому калькулятор.."); + pause(1210); + + Calculator calc = new Calculator(); + System.out.println("..готово!"); + System.out.println("Давай заполним список товаров. Аккуратно, не торопясь. "); + + while (true) { + if (!goodsLine.isEmpty()){ + System.out.println("Ещё добавим товар?"); + if (scanner.next().equalsIgnoreCase("Завершить")){ + break; + } + } + + ReceiptLine receiptLine = new ReceiptLine(scanner); + + goodsLine = goodsLine + (goodsLine.isEmpty() ? "" : "\n") + receiptLine.name + " - " +calc.formatSum(receiptLine.price); + amountReceipt = amountReceipt + calc.conversionSum(receiptLine.price); + } + System.out.println("let me think..."); + pause(1200); + System.out.println("--------------------------------------"); + System.out.println("Итоговый чек:\n\n"+goodsLine); + System.out.println("\nИТОГО: "+calc.formatSum(amountReceipt)); + System.out.println("--------------------------------------"); + double totalPart = calc.calculate(pplCount,amountReceipt); + System.out.println("\nЗначит с каждого "+calc.formatSum(totalPart)); + + double control = calc.conversionSum(totalPart*pplCount); + if (!(control == amountReceipt)){ + double diff = amountReceipt - control; + if (diff<0) { + System.out.println("\nКому-то можно будет заплатить на " + calc.formatSum(diff) + " меньше"); + }else{ + System.out.println("\nКому-то нужно будет заплатить на " + calc.formatSum(diff) + " больше"); + } + System.out.println("Что поделаешь - округление *пожимает плечами*"); + } + + } + + static void pause(int millS){ + try { + Thread.sleep(millS); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + + } \ No newline at end of file diff --git a/src/main/java/ReceiptLine.java b/src/main/java/ReceiptLine.java new file mode 100644 index 000000000..194d57493 --- /dev/null +++ b/src/main/java/ReceiptLine.java @@ -0,0 +1,46 @@ +import java.util.Scanner; + +public class ReceiptLine { + String name; + Double price; + + ReceiptLine(Scanner scanner){ + int numberOfTry = 0; + do { + numberOfTry ++; + if (numberOfTry==1){ + System.out.println("Введи название товара:"); + }else { + System.out.println("Попытка "+numberOfTry+". Введи название товара:"); + } + + name = scanner.next(); + if (name.isEmpty()){ + System.out.println("Если названия нет, можно поставить прочерк! :)"); + } + + } while (name.isEmpty()); + + numberOfTry = 0; + + double currentPrice; + do { + numberOfTry ++; + if (numberOfTry==1){ + System.out.println("Введи цену товара:"); + }else { + System.out.println("Попытка "+numberOfTry+". Введи цену товара:"); + } + + try { + price = Double.valueOf(scanner.next()); + }catch (Exception e){ + price = 0.0; + System.out.println("Всё же нужно положительное число. Если необходимо ввести дробную часть, то можно использовать точку. Например \"10.45\""); + } + + + } while (!(price>0)); + } + +} From 043551cc3c14dff42c8e8bb1bc33fc4ed046051f Mon Sep 17 00:00:00 2001 From: Zedd3d Date: 2023年4月15日 22:37:58 +0200 Subject: [PATCH 2/2] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=B8=20=D0=BD=D0=B5=D0=B4=D0=BE=D1=87=D1=91=D1=82=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Calculator.java | 16 ++++-- src/main/java/Main.java | 102 +++++++++++++++++++-------------- src/main/java/ReceiptLine.java | 9 ++- 3 files changed, 74 insertions(+), 53 deletions(-) diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java index d7e8d0463..b02521d09 100644 --- a/src/main/java/Calculator.java +++ b/src/main/java/Calculator.java @@ -14,22 +14,26 @@ public double conversionSum(double price){ } public String formatSum(double price){ - String partOfPrice = (""+((int) price)); - partOfPrice = partOfPrice.substring(partOfPrice.length()-1); + int partOfPrice = ((int) price) % 100; + if (Double.compare(partOfPrice,14)>0) { + partOfPrice = ((int) partOfPrice) % 10; + } String nameRub = ""; switch (partOfPrice){ - case "1": + case 1: nameRub = "рубль"; break; - case "2": - case "3": - case "4": + case 2: + case 3: + case 4: nameRub = "рубля"; break; default: nameRub = "рублей"; } return String.format("%.2f %s",price, nameRub); + + } } diff --git a/src/main/java/Main.java b/src/main/java/Main.java index c3f885733..b4109babb 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -3,78 +3,96 @@ public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); - int pplCount = 0; - String goodsLine = ""; - double amountReceipt = 0; - - System.out.println("Привет. Это твой \"калькулятор разделения счёта на всех\". На сколько человек сегодня делим счёт?"); - do { - try{ - pplCount = Integer.valueOf(scanner.next()); - - if (pplCount==1) { - System.out.println("Для одного человека делить счёт смысла нет :) всё же сколько вас было?"); - }else if (pplCount<=1) { - System.out.println("" + pplCount + " ? серьёзно? Мне кажется я знаю список товаров;) Давай всё же по новой. Сколько вас было ?!"); - } - } catch (Exception e){ - System.out.println("Что-то пошло не так, давай ещё раз попробуем =/ Нужно целое число"); - } + //String goodsLine = ""; + double amountReceipt = 0; - }while (!(pplCount>1)); + int pplCount = getPplCount(scanner); System.out.println("Итак вас было "+pplCount); - System.out.println("Сейчас сделаю побыстрому калькулятор.."); - pause(1210); + //System.out.println("Сейчас сделаю побыстрому калькулятор.."); + //pause(1210); Calculator calc = new Calculator(); - System.out.println("..готово!"); + //System.out.println("..готово!"); System.out.println("Давай заполним список товаров. Аккуратно, не торопясь. "); + StringBuilder goodsLineSB = new StringBuilder(); + goodsLineSB.append("--------------------------------------"); + goodsLineSB.append("\nИтоговый чек:\n"); + + + boolean firstItem = true;//при do while было циклическое исключение почему то while (true) { - if (!goodsLine.isEmpty()){ + if (firstItem==false){ System.out.println("Ещё добавим товар?"); - if (scanner.next().equalsIgnoreCase("Завершить")){ + if (scanner.nextLine().equalsIgnoreCase("Завершить")){ break; } + }else{ + firstItem = false; } - ReceiptLine receiptLine = new ReceiptLine(scanner); + ReceiptLine receiptLine = new ReceiptLine(scanner,calc); + goodsLineSB.append("\n"); + goodsLineSB.append(receiptLine.name); + goodsLineSB.append(" - "); + goodsLineSB.append(calc.formatSum(receiptLine.price)); - goodsLine = goodsLine + (goodsLine.isEmpty() ? "" : "\n") + receiptLine.name + " - " +calc.formatSum(receiptLine.price); amountReceipt = amountReceipt + calc.conversionSum(receiptLine.price); } - System.out.println("let me think..."); - pause(1200); - System.out.println("--------------------------------------"); - System.out.println("Итоговый чек:\n\n"+goodsLine); - System.out.println("\nИТОГО: "+calc.formatSum(amountReceipt)); - System.out.println("--------------------------------------"); + //System.out.println("let me think..."); + //pause(1200); + + goodsLineSB.append("\n\nИТОГО: "); + goodsLineSB.append(calc.formatSum(amountReceipt)); + goodsLineSB.append("\n--------------------------------------"); double totalPart = calc.calculate(pplCount,amountReceipt); - System.out.println("\nЗначит с каждого "+calc.formatSum(totalPart)); + goodsLineSB.append("\n\nНапомню, что делим на "); + goodsLineSB.append(pplCount); + goodsLineSB.append("\nЗначит с каждого "); + goodsLineSB.append(calc.formatSum(totalPart)); double control = calc.conversionSum(totalPart*pplCount); if (!(control == amountReceipt)){ double diff = amountReceipt - control; if (diff<0) { - System.out.println("\nКому-то можно будет заплатить на " + calc.formatSum(diff) + " меньше"); + goodsLineSB.append("\nКому-то можно будет заплатить на "); + goodsLineSB.append(calc.formatSum(diff)); + goodsLineSB.append(" меньше"); }else{ - System.out.println("\nКому-то нужно будет заплатить на " + calc.formatSum(diff) + " больше"); + goodsLineSB.append("\nКому-то нужно будет заплатить на "); + goodsLineSB.append(calc.formatSum(diff)); + goodsLineSB.append(" больше"); } - System.out.println("Что поделаешь - округление *пожимает плечами*"); + //goodsLineSB.append("Что поделаешь - округление *пожимает плечами*"); } - + System.out.println(goodsLineSB); } - static void pause(int millS){ - try { - Thread.sleep(millS); - } catch (InterruptedException e) { - e.printStackTrace(); - } + static int getPplCount(Scanner scanner){ + int pplCount=0; + System.out.println("Привет. Это твой \"калькулятор разделения счёта на всех\". На сколько человек сегодня делим счёт?"); + do { + try{ + pplCount = Integer.valueOf(scanner.nextLine()); + + if (pplCount==1) { + System.out.println("Для одного человека делить счёт смысла нет :) всё же сколько вас было?"); + }else if (pplCount<=1) { + System.out.println("" + pplCount + " ? серьёзно? Мне кажется я знаю список товаров;) Давай всё же по новой. Сколько вас было ?!"); + } + + } catch (Exception e) { + if (!e.getMessage().equalsIgnoreCase("For input string: \"\"")){ + System.out.println("Что-то пошло не так, давай ещё раз попробуем =/ Нужно целое число"); + } + } + + }while (pplCount<=1); + return pplCount; } diff --git a/src/main/java/ReceiptLine.java b/src/main/java/ReceiptLine.java index 194d57493..c9aeb6865 100644 --- a/src/main/java/ReceiptLine.java +++ b/src/main/java/ReceiptLine.java @@ -4,7 +4,7 @@ public class ReceiptLine { String name; Double price; - ReceiptLine(Scanner scanner){ + ReceiptLine(Scanner scanner, Calculator calc){ int numberOfTry = 0; do { numberOfTry ++; @@ -14,7 +14,7 @@ public class ReceiptLine { System.out.println("Попытка "+numberOfTry+". Введи название товара:"); } - name = scanner.next(); + name = scanner.nextLine(); if (name.isEmpty()){ System.out.println("Если названия нет, можно поставить прочерк! :)"); } @@ -23,7 +23,6 @@ public class ReceiptLine { numberOfTry = 0; - double currentPrice; do { numberOfTry ++; if (numberOfTry==1){ @@ -33,14 +32,14 @@ public class ReceiptLine { } try { - price = Double.valueOf(scanner.next()); + price = calc.conversionSum(Double.valueOf(scanner.nextLine())); }catch (Exception e){ price = 0.0; System.out.println("Всё же нужно положительное число. Если необходимо ввести дробную часть, то можно использовать точку. Например \"10.45\""); } - } while (!(price>0)); + } while (Double.compare(price, 0.0)<=0); } }

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