diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java new file mode 100644 index 000000000..cf0ddd80a --- /dev/null +++ b/src/main/java/Calculator.java @@ -0,0 +1,129 @@ +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("Введите цену [руб].[коп]:"); + price=0; + while (true) { + try { + vvodStr = scanner.nextLine(); + price = Double.parseDouble(vvodStr); + 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.print(price);System.out.println(""); + +// добавление товара в список + } + 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 /(double)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..1af36e05d 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,6 +1,32 @@ +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 не работает и т.п. тоже не работают + 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); + + } } -} \ No newline at end of file +} 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 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