diff --git a/src/main/java/Calculate.java b/src/main/java/Calculate.java new file mode 100644 index 000000000..31feb92d3 --- /dev/null +++ b/src/main/java/Calculate.java @@ -0,0 +1,34 @@ +import java.util.ArrayList; +import java.util.List; + +public class Calculate { + String nameItem = ""; + + double costItem = 0; + double totalCost = 0; + List arrayGoods = new ArrayList(); + DecodingTextForCost textCost = new DecodingTextForCost(); + + void calculate(int countManForPay) { + while (true) { + nameItem = Main.input.strInput("Введите название товара"); + costItem = Main.input.doubleInput("Введите стоимость товара в формате рубли.копейки"); + totalCost = totalCost + costItem; + arrayGoods.add(new Goods(nameItem, costItem)); + System.out.println("Товар: " + nameItem + " стоимостью: " + textCost.decode(costItem) + " успешно добавлен\n"); + + nameItem = Main.input.strInput("Для продолжения ввода введите любой символ\nДля завершения введите \"Завершить\""); + if (nameItem.equalsIgnoreCase("Завершить")) { + break; + } + + } + System.out.println("Всего введено товаров: " + arrayGoods.size() + "\nна сумму: " + textCost.decode(totalCost)); + System.out.println("Добавленные товары:"); + for (int i = 0; i < arrayGoods.size(); i++) { + System.out.println(arrayGoods.get(i).name + " стоимостью " + textCost.decode(arrayGoods.get(i).cost)); + } + System.out.println("Cчет делится на " + countManForPay + " человек"); + System.out.println("На каждого приходится " + textCost.decode(totalCost / countManForPay)); + } +} diff --git a/src/main/java/DecodingTextForCost.java b/src/main/java/DecodingTextForCost.java new file mode 100644 index 000000000..ec3461042 --- /dev/null +++ b/src/main/java/DecodingTextForCost.java @@ -0,0 +1,33 @@ +public class DecodingTextForCost { + String decode(double cost) { + int roundCost = (int) cost; + String result; + + switch (roundCost) { + case 11: + case 12: + case 13: + case 14: + result = String.format("%.2f рублей", cost); + break; + default: + switch (roundCost % 10) { + case 1: + result = String.format("%.2f рубль", cost); + break; + case 2: + case 3: + case 4: + result = String.format("%.2f рубля", cost); + break; + default: + result = String.format("%.2f рублей", cost); + break; + } + break; + } + + //System.out.println(roundCost); + return result; + } +} diff --git a/src/main/java/Goods.java b/src/main/java/Goods.java new file mode 100644 index 000000000..6c7f8d19d --- /dev/null +++ b/src/main/java/Goods.java @@ -0,0 +1,9 @@ +public class Goods { + String name; + double cost; + + Goods(String name, double cost) { + this.name = name; + this.cost = cost; + } +} diff --git a/src/main/java/Input.java b/src/main/java/Input.java new file mode 100644 index 000000000..b4cf506dd --- /dev/null +++ b/src/main/java/Input.java @@ -0,0 +1,81 @@ +import java.util.Scanner; +import java.util.Set; + +public class Input { + Scanner scanner = new Scanner(System.in); + + String strInput(String greetText) { + String result = ""; + System.out.println(greetText); + while (true) { + result = scanner.nextLine(); + if (result.length() == 0) { + System.out.println("Необходимо что-то ввести\nПожалуйста, повторите\n"); + } else { + break; + } + } + + + return result; + } + + int intInput(String greetText) { + int result = 0; + + System.out.println(greetText); + + while (true) { + if (!scanner.hasNextInt()) { + System.out.println("Не корректный ввод\nПожалуйста, повторите\n"); + scanner.nextLine(); + } else { + result = scanner.nextInt(); + break; + } + } + scanner.nextLine(); + return result; + } + + double doubleInput(String greetText) { + String rawInputString = ""; + double result = 0.0; + Scanner scanner2; + + System.out.println(greetText); + while (true) { + rawInputString = scanner.nextLine(); + scanner2 = new Scanner(refineInputStringForDouble(rawInputString)); + if (scanner2.hasNextDouble()) { + result = scanner2.nextDouble(); + break; + } else { + System.out.println("Введена не корректная стоимость, пожалуйста повторите ввод\n"); + } + } + return result; + } + + //Метод удаляет из строки все символы не релевантные для типа dounle, заменяет точку запятой и возвращает получившуюся строку + String refineInputStringForDouble(String refineString) { + Set validChars = Set.of('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ',', '.'); + String result = ""; + + + char[] arrayRawInputString = refineString.toCharArray(); + + for (int i = 0; i < arrayRawInputString.length; i++) { + if (validChars.contains(arrayRawInputString[i])) { + if (arrayRawInputString[i] == '.') { + result += ','; + } else { + result += arrayRawInputString[i]; + } + } + } + //System.out.println(result); + return result; + } +} + diff --git a/src/main/java/Main.java b/src/main/java/Main.java index db9356a08..0ade185bf 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,6 +1,24 @@ public class Main { + static Input input = new Input(); + public static void main(String[] args) { - System.out.println("Hello world!"); + int countManForPay = -1; + Calculate calc = new Calculate(); + + while (true) { + countManForPay = input.intInput("На сколько человек необходимо разделить счет?"); + if (countManForPay < 1) { + System.out.println("Ошибка: введенное количество человек меньше 1\nПожалуйста повторите ввод\n"); + } else if (countManForPay == 1) { + System.out.println("Ошибка: введен один человек, деление счета не нужно\nПожалуйста повторите ввод.\n"); + } else { + System.out.println("Счет будет разделен на " + countManForPay + " человек\n"); + break; + } + } + calc.calculate(countManForPay); } -} \ No newline at end of file + + +}

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