forked from Yandex-Practicum/Java-Module-Project-YP
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCalculator.java
More file actions
67 lines (59 loc) · 4.37 KB
/
Calculator.java
File metadata and controls
67 lines (59 loc) · 4.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
import java.util.ArrayList;
import java.util.Locale;
import java.util.Scanner;
public class Calculator {
/* Класс хронит в себе добавленные товары и общую сумму за эти товары */
ArrayList<Goods> goodsList = new ArrayList<>(); // Создаем массив для имен продуктов
double summa; // Создаем переменную под общую сумму
public Calculator() {
Scanner scanner = new Scanner(System.in); // Подключаем сканер
while(true) {
String goodsName;
System.out.println("Введите товар или команду [Завершить]:"); // Просим пользователя ввести название товара или завершить подсчет
goodsName = scanner.next(); // Сканируем введенный текст
if(goodsName.equalsIgnoreCase("Завершить")) { // Сравниваем строку с командой завершения
break; // если пользователь ввел "Завершить", то останавливаем цикл
}
else if (goodsName.trim().isEmpty()) { // Режем пробелы и проверяем на пустоту
System.out.println("Ошибка! Название товара не должно быть пустым."); // Если пользователь не ввел название и нажал Enter
continue;
}
else { // Иначе (если все ОК) добавляем товар и просим пользователя ввести цену товара
Goods goods = new Goods(goodsName);
while(true) { // Цикл нужен, чтобы запрашивать цену товара у пользователя, пока тот не введет корректное значение
double price; // Для цены товаров
try {
Scanner scannerPrice = new Scanner(System.in); // Подключаем сканер (если этого не сделать, до зацикливается)
scannerPrice.useLocale(Locale.US); // В ТЗ сказано, что при вводе/выводе число должно разделяться точкой
System.out.println("Введите его цену в формате Рубли.Копейки:"); // Спрашиваем цену у пользователя
price = scannerPrice.nextDouble(); // Сканирует ответ
if(price >=0) { // если цена корректная
goods.price = price;
goodsList.add(goods);
summa += price;
break; // Останавливаем цикл с запросом цены
}
else { // Иначе выводим сообщение об ошибке
System.out.println("Ошибка. Цена не может быть отрицательной");
}
}
catch(Exception ex) {
System.out.println("Ошибка! Цена должна быть числом в формате Рубли.Копейки.");
}
}
}
}
}
void printGoods() {
Formatter formatter = new Formatter(); // Создаем экземпляр класса форматтера
System.out.println("Добавленные товары:\n");
for (Goods goods : goodsList) {
System.out.println(goods.name + "-"+ formatter.numberFormat(goods.price));
}
System.out.println("Общая сумма "+ formatter.numberFormat(summa)); // Выводим общую сумму за все товары
}
void divideSumma(int people) {
Formatter formatter = new Formatter(); // Создаем экземпляр класса форматтера
System.out.println("Каждый должен заплатить "+ formatter.numberFormat(summa / people)); // Выводим результат
}
}