forked from Yandex-Practicum/Java-Module-Project
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMain.java
More file actions
98 lines (85 loc) · 5.37 KB
/
Main.java
File metadata and controls
98 lines (85 loc) · 5.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Calculator calculator = new Calculator();
Scanner sc = new Scanner(System.in);
//Запрашиваем количество людей и помещаем в calculator.numberOfPeople.
System.out.print("На сколько человек разделить счет? ");
getNumberOfPeople(calculator, sc);
//Выполняем основной цикл пока isExit() == false
do {
System.out.println("Введите название нового товара:");
addNewProductName(calculator, sc);
System.out.println("Введите цену товара в формате \"рубли,копейки\"");
addNewProductPrice(calculator, sc);
System.out.printf("Вы добавили товар: %s с ценой %.2f %s\n", calculator.currentProduct, calculator.currentPrice, wordRoubleEnding(calculator.currentPrice));
} while (!isExit(sc));
//Выводим результат
printResult(calculator);
}
//Метод getNumberOfPeople() запрашивает ввод с консоли значения и помещает его в calculator.numberOfPeople,
// если значение меньше 1 или не является целым числом, то запрашивает повторно.
public static void getNumberOfPeople(Calculator calculator, Scanner sc) {
do {
System.out.println("Введите целое число больше 1.");
while (!sc.hasNextInt()) {
System.out.println("Введите целое число!");
sc.next();
}
calculator.numberOfPeople = sc.nextInt();
} while (calculator.numberOfPeople <= 1);
}
// Метод addNewProductName() запрашивает ввод названия товара и добавляет его в калькулятор
public static void addNewProductName(Calculator calculator, Scanner sc) {
//Запрашиваем название товара "
calculator.currentProduct = sc.next();
//Добавляем название товара в калькулятор
calculator.addProductName(calculator.currentProduct + "\n");
}
//Метод addNewProductPrice() запрашивает цену товара и добавляет ее в калькулятор.
public static void addNewProductPrice(Calculator calculator, Scanner sc) {
//Запрашиваем цену товара в нужном формате, если формат неверный - выводим ошибку и запрашиваем повторно.
while (!sc.hasNextDouble()) {
System.out.println("Неверный формат цены!\nВведите цену товара в формате \"рубли,копейки\"");
sc.next();
}
//Если формат цены верный, то присваиваем цену calculator.currentPrice и суммируем в калькуляторе.
calculator.currentPrice = sc.nextDouble();
calculator.priceSum(calculator.currentPrice);
}
//Метод isExit() возвращает true, если ввели "завершить" иначе возвражает false
public static boolean isExit(Scanner sc) {
//Запрашиваем надо ли добавить новый товар или завершить.
System.out.println("Для добавления нового товара введите любой символ, для завершения введите \"завершить\".");
//Если ввели "завершить", то возвращаем true иначе возвращаем false
return sc.next().equalsIgnoreCase("завершить");
}
//Метод printResult() выводит список товаров, цену на каждого человека, и слово "рубль" с нужным окончанием
public static void printResult(Calculator calculator) {
double pricePerPerson = calculator.allProductPrice / calculator.numberOfPeople;
System.out.print("Добавленные товары:\n" + calculator.productList);
System.out.printf("Каждый должен заплатить: %.2f %s.\n", pricePerPerson, wordRoubleEnding(pricePerPerson));
}
//Метод wordEnding() возвращает строку с нужным написанием слова "рубль" в зависимости от последних цифр целой части цены.
public static String wordRoubleEnding(double price) {
int roundedPrice = (int) Math.floor(price);
String roubleEnding;
if (roundedPrice % 100 >= 11 && roundedPrice % 100 <= 14) {
roubleEnding = "рублей";
} else {
switch (roundedPrice % 10) {
case 1:
roubleEnding = "рубль";
break;
case 2:
case 3:
case 4:
roubleEnding = "рубля";
break;
default:
roubleEnding = "рублей";
}
}
return roubleEnding;
}
}