import static java.lang.Math.floor; import java.math.BigDecimal; import java.util.Scanner; public class Main { public static void main(String[] args) { String name; //название пÑодÑкÑа double price;// ÑÑоимоÑÑÑ Ð¿ÑодÑкÑа int peopleAmount; //кол-во Ñеловек Product newProduct = new Product(); //Ñоздаем ÑкземплÑÑ ÐºÐ»Ð°ÑÑа ÐÑодÑÐºÑ Ð´Ð»Ñ Ð·Ð°Ð¿Ð¸Ñи даннÑÑ peopleAmount = peopleAmountInputCheck(); //ввод и пÑовеÑка ÑоÑмаÑа ввода кол-ва Ñеловек do { name = inputNameFormatCheck(); //ввод и пÑоеÑка ÑоÑмаÑа ввода Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¿ÑодÑкÑа newProduct.nameList = newProduct.nameList + name + "\n"; //добавлÑем введеннÑй ÑÐ¾Ð²Ð°Ñ Ð² ÑпиÑок ÑоваÑов price = inputPriceFormatCheck(); //ввод и пÑовеÑка ÑоÑмаÑа ввода СÑоимоÑÑи пÑодÑкÑа newProduct.sum = newProduct.sum + price; //добавлÑем ÑÑоимоÑÑÑ ÑекÑÑего ÑоваÑа к ÑÑммаÑной ÑÑоимоÑÑи ÑоваÑов System.out.println("Ð¢Ð¾Ð²Ð°Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½ в калÑкÑлÑÑоÑ. ХоÑиÑе ли добавиÑÑ ÐµÑе один ÑоваÑ? ÐведиÑе лÑбой Ñимвол (еÑли Ñ Ð¾ÑиÑе) или ÐавеÑÑиÑÑ (еÑли не Ñ Ð¾ÑиÑе)"); Scanner scanner1 = new Scanner(System.in); String addNewProduct = scanner1.nextLine(); String strLower = addNewProduct.toLowerCase(); //пÑиводим введенное ÑÑÑоковое знаÑение к Ð½Ð¸Ð¶Ð½ÐµÐ¼Ñ ÑегиÑÑÑÑ if (strLower.equals("завеÑÑиÑÑ")) { //пÑовеÑÑем "завеÑÑиÑÑ" break; } } while (true); // законÑен полнÑй Ñикл ввода ÑоваÑов и ÑÑоимоÑÑи System.out.println("ÐобавленнÑе ÑоваÑÑ:"); System.out.println(newProduct.nameList); //вÑводим ÑпиÑок ÑоваÑов newProduct.sumPerPerson = newProduct.sum / peopleAmount; // вÑÑиÑлÑем ÑÑÐ¼Ð¼Ñ Ð½Ð° Ñеловека //опÑеделÑем падеж Ñлова "ÑÑблÑ": newProduct.padezh = Product.definePadezh(newProduct.sumPerPerson, newProduct.twoLastDigits, newProduct.oneLastDigit, newProduct.bezDrobnoyInt); System.out.println("СÑмма, коÑоÑÑÑ Ð´Ð¾Ð»Ð¶ÐµÐ½ заплаÑиÑÑ ÐºÐ°Ð¶Ð´Ñй Ñеловек, Ñавна: " + String.format("%.2f", newProduct.sumPerPerson) + newProduct.padezh); } static int peopleAmountInputCheck() { String question = "Ðа ÑколÑÐºÐ¸Ñ Ñеловек Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ ÑазделиÑÑ ÑÑÑÑ?"; String request = "ÐведиÑе коÑÑекÑное ÑиÑло. "; System.out.println(question); do { Scanner scanner = new Scanner(System.in); while (!scanner.hasNextInt()) { //пÑовеÑка ввода коÑÑекÑного знаÑÐµÐ½Ð¸Ñ Int System.out.println("Ðведенное знаÑение некоÑÑекÑно.\n" + question); scanner.next(); } int peopleAmountInput = scanner.nextInt(); if (peopleAmountInput == 1) { System.out.println("ÐÑибка! ÐолиÑеÑÑво Ñеловек не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñавно 1, Ñак как в ÑÑом ÑлÑÑае Ð½ÐµÑ ÑмÑÑла ниÑего ÑÑиÑаÑÑ Ð¸ делиÑÑ.\n" + request + " " + question); } if (peopleAmountInput < 1) { System.out.println("ÐÑибка! ÐолиÑеÑÑво Ñеловек не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑÑиÑаÑелÑнÑм или нÑлевÑм.\n" + request + " " + question); } if (peopleAmountInput > 1) { System.out.println("ÐÑлиÑно! ЧиÑло Ñеловек = " + peopleAmountInput); return peopleAmountInput; } } while (true); } static String inputNameFormatCheck() { String request = "ÐведиÑе название ÑоваÑа:"; System.out.println(request); Scanner scanner = new Scanner(System.in); String InputName = scanner.nextLine(); while (InputName.trim().equals("")) { //пÑовеÑка пÑÑÑого ввода System.out.println("ÐÑ Ð½Ð¸Ñего не ввели. " + request); InputName = scanner.nextLine(); } return InputName; } static Double inputPriceFormatCheck() { String question = "ÐведиÑе ÑÑоимоÑÑÑ ÑоваÑа в ÑоÑмаÑе 'ÑÑбли.копейки', напÑимеÑ, '10.45':"; do { System.out.println(question); Scanner scannerPrice = new Scanner(System.in); while (!scannerPrice.hasNextDouble()) { //пÑовеÑка на коÑÑекÑноÑÑÑ Ð²Ð²ÐµÐ´ÐµÐ½Ð½Ð¾Ð³Ð¾ ÑоÑмаÑа ÐÑобное знаÑение System.out.println("Ðведенное знаÑение некоÑÑекÑно.\n" + question); scannerPrice.next(); } Double priceInput = scannerPrice.nextDouble(); int digitsAfterDot = BigDecimal.valueOf(priceInput).scale(); //опÑеделÑем кол-во знаков поÑле запÑÑой if (digitsAfterDot == 2) { //пÑовеÑка на кол-во знаков поÑле запÑÑой в ÑооÑвеÑÑÑвии Ñ ÑÑебÑемÑм ÑоÑмаÑом (два знака поÑле запÑÑой) return priceInput; } System.out.println("Ðведенное знаÑение некоÑÑекÑно. Ðол-во знаков поÑле запÑÑой не Ñавно 2."); } while (true); // оконÑание Ñикл ввода ÑÑоимоÑÑи и пÑовеÑки ÑоÑмаÑа ввода } } class Product { int bezDrobnoyInt, twoLastDigits, oneLastDigit; //ÑÑмма на Ñеловека инÑоваÑ, две поÑÐ»ÐµÐ´Ð½Ð¸Ñ ÑиÑÑÑ ÑÑÐ¼Ð¼Ñ Ð½Ð° Ñеловека, одна поÑледнÑÑ ÑиÑÑа ÑÑÐ¼Ð¼Ñ Ð½Ð° Ñеловека String nameList = ""; //ÑпиÑок ÑоваÑов double sum, sumPerPerson; //обÑÐ°Ñ ÑÑмма ÑоваÑов, ÑÑмма на Ñеловека String padezh; //падеж напиÑÐ°Ð½Ð¸Ñ Ñлова "ÑÑблÑ" static String definePadezh(double sumPerPerson, int twoLastDigits, int oneLastDigit, int bezDrobnoyInt) { int padezhVar = 1; //ваÑÐ¸Ð°Ð½Ñ Ð¿Ð°Ð´ÐµÐ¶Ð°. ÐÑли 1 Ñо ÑÑблÑ, еÑли 2 Ñо ÑÑблÑ, еÑли 3 Ñо ÑÑблей double bezDrobnoy = floor(sumPerPerson); //оÑбÑаÑÑваем дÑобнÑÑ ÑаÑÑÑ bezDrobnoyInt = (int) bezDrobnoy; //пÑиводим к ÑелоÑиÑÐ»ÐµÐ½Ð½Ð¾Ð¼Ñ ÑÐ¸Ð¿Ñ oneLastDigit = bezDrobnoyInt % 10; //опÑеделÑем поÑÐ»ÐµÐ´Ð½Ð¸Ñ ÑиÑÑÑ twoLastDigits = bezDrobnoyInt % 100; //опÑеделÑем две поÑÐ»ÐµÐ´Ð½Ð¸Ñ ÑиÑÑÑ if (oneLastDigit == 0) { padezhVar = 3; } if (oneLastDigit == 1) { padezhVar = 1; } if (((oneLastDigit > 1) & (oneLastDigit < 5))) { padezhVar = 2; } if ((oneLastDigit > 4) & (oneLastDigit <= 9)) { padezhVar = 3; ; } if ((twoLastDigits > 4) & (twoLastDigits < 21)) { padezhVar = 3; } switch (padezhVar) { case (1): return " ÑÑблÑ."; case (2): return " ÑÑблÑ."; case (3): return " ÑÑблей."; default: return " error."; } } }