import java.util.Scanner; public class Main { final static Scanner scanner = new Scanner(System.in, "utf-8"); public static void main(String[] args) { int numOfPeople = getNumOfPeople(); // ÐолиÑÑеÑÑов лÑдей в компании. Calculator calculator = new Calculator(); // ÐÐ¾Ð´ÐµÐ»Ñ Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¿ÑодÑкÑов. addsProductsInList(calculator, true); // ÐобавлÑем пÑодÑкÑÑ Ð² моделÑ. 1 ÑпоÑоб. //addsProductsInList(calculator); // ÐобавлÑем пÑодÑкÑÑ Ð² моделÑ. 2 ÑпоÑоб. printResults(calculator, numOfPeople); // ÐеÑаÑаем ÑезÑлÑÑаÑ. } /** * ÐапÑаÑÐ¸Ð²Ð°ÐµÑ Ð¿Ð¾Ð»ÑзоваÑÐµÐ»Ñ Ð²Ð²ÐµÑÑи колиÑеÑÑво Ñеловек в компании, и возвÑаÑÐ°ÐµÑ ÑÑо колиÑеÑÑво. * * @return ÐозвÑаÑÐ°ÐµÑ ÑиÑло Ñеловек в комании. */ public static int getNumOfPeople() { System.out.println("ÐÑивеÑ! Ðа ÑколÑко Ñеловек должен бÑÑÑ Ñазделен ÑÑеÑ?"); // ÐÑоÑим ввеÑÑи колиÑеÑÑво лÑдей int numOfPeople; try { numOfPeople = Integer.parseInt(scanner.nextLine()); // ÐеÑÐµÑ Ð²Ð°ÑÑваем вÑлеÑ, еÑли полÑзоваÑÐµÐ»Ñ Ð²Ð²ÐµÐ» не ÑиÑло } catch (NumberFormatException e) { numOfPeople = 0; } // ÐолÑÑаем полÑзоваÑелÑÑкий ввод while (numOfPeople <= 1) { // ÐÑли ввод невеÑнÑй, ÑообÑаем об оÑибке и пÑоÑим ввеÑÑи Ñнова System.out.println("ÐепÑавилÑнÑй ввод! ÐолиÑеÑÑво Ñеловек должно бÑÑÑ > 1, попÑобÑйÑе ввеÑÑи еÑе Ñаз."); // ÐовÑÐ¾Ñ Ð·Ð°Ð¿ÑоÑа ввода System.out.println("Ðа ÑколÑко Ñеловек должен бÑÑÑ Ñазделен ÑÑеÑ?"); try { numOfPeople = Integer.parseInt(scanner.nextLine()); // ÐеÑÐµÑ Ð²Ð°ÑÑваем вÑлеÑ, еÑли полÑзоваÑÐµÐ»Ñ Ð²Ð²ÐµÐ» не ÑиÑло } catch (NumberFormatException e) { numOfPeople = 0; } } return numOfPeople; } /** * ÐобавлÑÐµÑ ÑоваÑÑ Ð² ÑпиÑок и подÑÑиÑÑÐ²Ð°ÐµÑ Ð¾Ð±ÑÑÑ ÑÑÐ¼Ð¼Ñ Ð·Ð° Ð½Ð¸Ñ . ÐеÑÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¸Ð· двÑÑ ÑÑÑок. * * @param calculator ÐкземлÑÑ ÐºÐ»Ð°ÑÑа, Ñо ÑпиÑком ÑоваÑов. * @param change ÐаÑÐºÐµÑ ÑÑÐ¾Ð±Ñ Ð¸ÑполÑзоваÑÑ Ð´ÑÑгой ÑпоÑоб */ public static void addsProductsInList(Calculator calculator, boolean change) { String name; // ÐÐ¼Ñ ÑоваÑа. String price; // Цена ÑоваÑа. while (true) { System.out.println("ÐведиÑе Ð¸Ð¼Ñ ÑоваÑа"); // ÐÑоÑим полÑзоваÑÐµÐ»Ñ Ð²Ð²ÐµÑÑи Ð¸Ð¼Ñ ÑоваÑа. name = scanner.nextLine(); // ÐолÑÑаем Ð¸Ð¼Ñ ÑоваÑа. System.out.println("ÐведиÑе ÑÐµÐ½Ñ ÑоваÑа в ÑоÑмаÑе -> 'ÑÑбли.копейки' [10.45, 11.40]"); // ÐÑоÑим полÑзоваÑÐµÐ»Ñ Ð²Ð²ÐµÑÑи Ð¸Ð¼Ñ ÑоваÑа. price = scanner.nextLine(); // ÐолÑÑаем ÑÐµÐ½Ñ ÑоваÑа ÑекÑÑом. if (name.isEmpty() || price.isEmpty()) { System.out.println("ÐепÑавилÑнÑй ввод, повÑоÑиÑе попÑÑкÑ!"); // СообÑение об оÑибке. continue; } try { // ÐÑобÑем ÑекÑÑовÑÑ ÑÐµÐ½Ñ ÑоваÑа пÑеобÑазоваÑÑ Ð² веÑеÑÑвенное ÑиÑло. calculator.addProduct(name, Float.parseFloat(price)); // Ðобавление ÑоваÑа в ÑпиÑок. } catch (NumberFormatException e) { System.out.println("ÐепÑавилÑнÑй ввод, повÑоÑиÑе попÑÑкÑ! УбедиÑеÑÑ ÑÑо пÑавилÑно Ñказали ÑенÑ!"); // СообÑение об оÑибке. continue; } System.out.println("Ð¢Ð¾Ð²Ð°Ñ Ð±Ñл ÑÑпеÑно добавлен!"); // СообÑение об ÑÑпеÑном добавлении.System.out.println("ХоÑиÑе добавиÑÑ ÐµÑе один пÑодÑкÑ?\nÐведиÑе \"ÐавеÑÑиÑÑ\" ÑÑÐ¾Ð±Ñ Ð·Ð°ÐºÐ¾Ð½ÑиÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ ÑоваÑов.\nÐведиÑе лÑбÑÑ Ð±ÑÐºÐ²Ñ Ð´Ð»Ñ Ð¿ÑодолжениÑ."); // СпÑаÑиваем полÑзоваÑелÑ, Ñ Ð¾ÑÐµÑ Ð»Ð¸ он добавиÑÑ ÐµÑе один ÑоваÑ. System.out.println("ХоÑиÑе добавиÑÑ ÐµÑе один пÑодÑкÑ?\n" + "1.ÐведиÑе \"ÐавеÑÑиÑÑ\" ÑÑÐ¾Ð±Ñ Ð·Ð°ÐºÐ¾Ð½ÑиÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ ÑоваÑов.\n" + "2.ÐведиÑе лÑбой Ñимвол Ð´Ð»Ñ Ð¿ÑодолжениÑ."); name = scanner.nextLine(); // ÐолÑÑаем оÑÐ²ÐµÑ Ð½Ð° вопÑоÑ. if (name.equalsIgnoreCase("завеÑÑиÑÑ")) { // ÐÑли полÑзоваÑÐµÐ»Ñ Ð²Ð²ÐµÐ» "ÐавеÑÑиÑÑ", вÑÑ Ð¾Ð´Ð¸Ð¼ из Ñикла. break; } } } /** * ÐобавлÑÐµÑ ÑоваÑÑ Ð² ÑпиÑок и подÑÑиÑÑÐ²Ð°ÐµÑ Ð¾Ð±ÑÑÑ ÑÑÐ¼Ð¼Ñ Ð·Ð° Ð½Ð¸Ñ . ÐеÑÐµÑ Ð¸Ð½ÑоÑмаÑÐ¸Ñ Ð¸Ð· одной ÑÑÑоки. * * @param calculator ÐкземлÑÑ ÐºÐ»Ð°ÑÑа, Ñо ÑпиÑком ÑоваÑов. */ public static void addsProductsInList(Calculator calculator) { String userInputAdd; // ÐолÑзоваÑелÑÑкий ввод. String name; // ÐÐ¼Ñ ÑоваÑа. String price; // Цена ÑоваÑа. int[] indexes = new int[4]; // ÐаÑÑив индекÑов Ð´Ð»Ñ Ð²ÑÑаÑÐºÐ¸Ð²Ð°Ð½Ð¸Ñ Ð¿Ð¾Ð´ÑÑÑоки. while (true) { System.out.println("ÐведиÑе Ð¸Ð¼Ñ ÑоваÑа и его ÑÐµÐ½Ñ Ð² ÑооÑвеÑÑÑвии Ñ ÑоÑмаÑом, ÑÑÐ¾Ð±Ñ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ. ФоÑÐ¼Ð°Ñ -> \"'Ð¸Ð¼Ñ ÑоваÑа' 10.0\"."); // ÐÑоÑим полÑзоваÑÐµÐ»Ñ Ð²Ð²ÐµÑÑи ÑоваÑ. userInputAdd = scanner.nextLine(); // ÐолÑÑаем полÑзоваÑелÑÑкий ввод. if (!userInputAdd.isEmpty()) { // ÐÑли полÑзоваÑÐµÐ»Ñ ÑÑо-Ñо ввел. parseUserAddInput(userInputAdd, indexes); if (indexes[0] < 1 || indexes[1] < 1 || indexes[2] < 1 || indexes[3] < 1) { // ÐÑовеÑка ввода полÑзоваÑÐµÐ»Ñ Ð½Ð° ÑооÑвеÑÑÑвие ÑоÑмаÑÑ. if (indexes[0] == 0 || indexes[1] == -1) { System.out.println("ÐепÑавилÑнÑй ввод, повÑоÑиÑе попÑÑкÑ! УбедиÑеÑÑ ÑÑо помеÑÑили Ð¸Ð¼Ñ ÑоваÑа в ковÑÑки!"); // СообÑение об оÑибке. } else { System.out.println("ÐепÑавилÑнÑй ввод, повÑоÑиÑе попÑÑкÑ! УбедиÑеÑÑ ÑÑо пÑавилÑно Ñказали ÑенÑ!"); // СообÑение об оÑибке. } clearIndexes(indexes); continue; // ÐеÑемеÑение к наÑÐ°Ð»Ñ Ñела Ñикла. } if (userInputAdd.charAt(indexes[2] - 1) == '-') { // ÐÑовеÑка на ÑÑÑеÑÑвование минÑÑа пеÑед ÑиÑлом. System.out.println("ÐепÑавилÑнÑй ввод, повÑоÑиÑе попÑÑкÑ! Цена ÑоваÑа не Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾ÑÑиÑаÑелÑной!"); clearIndexes(indexes); continue; } name = userInputAdd.substring(indexes[0], indexes[1]); // ÐзвлеÑение из полÑзоваÑелÑÑкого ввода имени ÑоваÑа. if (name.isEmpty()) { name = Character.toString(userInputAdd.charAt(indexes[0])); } price = userInputAdd.substring(indexes[2], indexes[3]); // ÐзвлеÑение из полÑзоваÑелÑÑкого ввода ÑÐµÐ½Ñ ÑоваÑа. if (price.isEmpty()) { price = Character.toString(userInputAdd.charAt(indexes[2])); } calculator.addProduct(name, Float.parseFloat(price)); // Ðобавление ÑоваÑа в ÑпиÑок. System.out.println("Ð¢Ð¾Ð²Ð°Ñ Ð±Ñл ÑÑпеÑно добавлен!"); // СообÑение об ÑÑпеÑном добавлении. clearIndexes(indexes); } else { System.out.println("ÐепÑавилÑнÑй ввод, повÑоÑиÑе попÑÑкÑ!"); continue; } System.out.println("ХоÑиÑе добавиÑÑ ÐµÑе один пÑодÑкÑ?\nÐведиÑе \"ÐавеÑÑиÑÑ\" ÑÑÐ¾Ð±Ñ Ð·Ð°ÐºÐ¾Ð½ÑиÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ðµ ÑоваÑов.\nÐведиÑе лÑбÑÑ Ð±ÑÐºÐ²Ñ Ð´Ð»Ñ Ð¿ÑодолжениÑ."); // СпÑаÑиваем полÑзоваÑелÑ, Ñ Ð¾ÑÐµÑ Ð»Ð¸ он добавиÑÑ ÐµÑе один ÑоваÑ. userInputAdd = scanner.nextLine(); // ÐолÑÑаем оÑÐ²ÐµÑ Ð½Ð° вопÑоÑ. if (userInputAdd.equalsIgnoreCase("завеÑÑиÑÑ")) { // ÐÑли полÑзоваÑÐµÐ»Ñ Ð²Ð²ÐµÐ» "ÐавеÑÑиÑÑ", вÑÑ Ð¾Ð´Ð¸Ð¼ из Ñикла. break; } } } /** * ÐаÑÑÐµÑ Ð´Ð»Ñ Ð¸Ð·Ð²Ð»ÐµÑÐµÐ½Ð¸Ñ Ð¸Ð· полÑзоваÑелÑÑкого ввод даннÑÑ , Ð´Ð»Ñ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð¸Ñ Ð² ÑпиÑок пÑодÑкÑов. * * @param userInput ÐолÑзоваÑелÑÑкий ввод. * @param indexes ÐаÑÑив Ð´Ð»Ñ ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð½Ð´ÐµÐºÑов, Ð´Ð»Ñ Ð¿Ð¾Ð´ÑÑÑок. */ public static void parseUserAddInput(String userInput, int[] indexes) { indexes[0] = userInput.indexOf('\'') + 1; // ÐÑква поÑле пеÑвого попавÑегоÑÑ Ñимвола "'". indexes[1] = userInput.indexOf('\'', indexes[0]); // ÐÑква пеÑед ÑледÑÑÑим попавÑимÑÑ Ñимволом "'". if (indexes[0] == 0 || indexes[1] == -1) { return; } int length = userInput.length(); for (int i = indexes[1]; i < length; i++) { // ÐаÑинаем Ñо ÑледÑÑÑего Ñимвола поÑле вÑоÑой "'". if (Character.isDigit(userInput.charAt(i)) && indexes[2] == 0) { // ÐÐ°Ñ Ð¾Ð´Ð¸Ð¼ ÑиÑÑÑ. indexes[2] = i; } // ÐÑли поÑле Ð½Ð°Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ñ ÑиÑÑÑ Ð½Ð°ÑелÑÑ Ñимвол не ÑиÑÑÑ Ð¸ ÑÑо не ., Ñо запоминаем поÑледнее Ð²Ñ Ð¾Ð¶Ð´ÐµÐ½Ð¸Ðµ ÑиÑÑÑ. if (!Character.isDigit(userInput.charAt(i)) && userInput.charAt(i) != '.' && indexes[2] != 0) { indexes[3] = i - 1; return; } } if (indexes[2] != 0 && indexes[3] == 0) { indexes[3] = userInput.length() - 1; } } /** * ÐеÑаÑÐ°ÐµÑ ÑезÑлÑÑÐ°Ñ Ð¿Ð¾Ð´ÑÑеÑов. * * @param calculator СпиÑок вÑÐµÑ Ð¿ÑодÑкÑов и Ð¸Ñ Ð¾Ð±Ñей ÑÑоимоÑÑи. * @param numOfPeople ÐолиÑеÑÑво Ñеловек в компании. */ public static void printResults(Calculator calculator, int numOfPeople) { System.out.println("ÐобавленнÑе ÑоваÑÑ:"); int size = calculator.getProducts().size(); float part = calculator.getTotalAmount() / numOfPeople; // ÐоделеннÑй ÑÑÐµÑ Ð½Ð° одного Ñеловека for (int i = 0; i < size; i++) { System.out.println(calculator.getProducts().get(i) + "."); } String format = "Ðа каждого Ñеловека полÑÑиÑÑÑ Ð¿Ð¾ = %.2f"; // ÐкÑÑгление до 2 ÑиÑел поÑле запÑÑой if (part % 100 > 10 && part % 100 < 15) { System.out.println(String.format(format, part) + " ÑÑблей."); } else if (part % 10 == 1) { System.out.println(String.format(format, part) + " ÑÑблÑ."); } else if (part % 10 > 1 && part % 10 < 5) { System.out.println(String.format(format, part) + " ÑÑблÑ."); } else { System.out.println(String.format(format, part) + " ÑÑблей."); } } /** * ÐÑиÑÑка маÑÑива Ð¾Ñ Ð·Ð½Ð°Ñений * * @param indexes ÐаÑÑив Ð´Ð»Ñ Ð¾Ð±Ð½ÑÐ»ÐµÐ½Ð¸Ñ */ public static void clearIndexes(int[] indexes) { int size = indexes.length; for (int i = 0; i < size; i++) { indexes[i] = 0; } } }