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
94 lines (92 loc) · 4.23 KB
/
Calculator.java
File metadata and controls
94 lines (92 loc) · 4.23 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
import java.util.Locale;
import java.util.Scanner;
import java.util.HashMap;
import java.util.Iterator;
import static java.lang.Math.floor;
public class Calculator {
HashMap<String, Double> itemsInInvoice = new HashMap<>();
Scanner scanner = new Scanner(System.in).useLocale(Locale.US);
String item;
Double cost;
Double amount = (double) 0;
boolean stopProgram = false;
void calculate (int peoplesInInvoice) {
while (true) {
System.out.println("Введите название товара");
item = scanner.nextLine();
if (item.equalsIgnoreCase("Завершить")) {
break;
}
System.out.println("Введите стоимость товара в формате рубли.копейки");
while(!scanner.hasNextDouble()) {
if (scanner.nextLine().equalsIgnoreCase("Завершить")) {
stopProgram = true;
break;
}
System.out.println("Введите число больше нуля");
}
while (!stopProgram && scanner.hasNextDouble()) {
if ((cost = scanner.nextDouble()) > 0) {
scanner.nextLine();
break;
}
System.out.println("Введите число больше нуля");
}
if (stopProgram) {
break;
}
if (!itemsInInvoice.containsKey(item)) {
itemsInInvoice.put(item, cost);
System.out.println("Товар " + item + " стоимостью " + costToWord(cost) + " успешно добавлен\n");
}
else {
System.out.println("Товар с именем " + item + " уже есть в списке. Добавить ещё один? (Y/N), (Д/Н)");
while (true) {
String addItem = scanner.nextLine();
if (addItem.equalsIgnoreCase("Y") || (addItem.equalsIgnoreCase("Д"))) {
int i = 1;
while (true) {
String dublicateItem = item + " (" + i + ")";
if (!itemsInInvoice.containsKey(dublicateItem)) {
item = dublicateItem;
itemsInInvoice.put(item, cost);
System.out.println("Товар " + item + " стоимостью " + costToWord(cost) + " успешно добавлен\n");
break;
}
i++;
}
break;
}
else if (addItem.equalsIgnoreCase("N") || (addItem.equalsIgnoreCase("Н"))) {
break;
}
System.out.println("Введите 'Y' ('Д'), если хотите добавить товар. Введите 'N' ('Н'), если не хотите");
}
}
}
Iterator<String> itemIterator = itemsInInvoice.keySet().iterator();
if (!itemIterator.hasNext()) {
System.out.println("Список товаров пуст");
}
while (itemIterator.hasNext()) { // до тех пор, пока есть непройденный элемент в списке
String element = itemIterator.next(); // получаем следующий элемент
System.out.println(element + ": " + costToWord(itemsInInvoice.get(element)));
amount += itemsInInvoice.get(element);
}
System.out.println("Итого: по " + costToWord(amount/peoplesInInvoice) + " с человека");
}
int roundDown (Double cost) {
return (int) floor(cost);
}
String costToWord (Double cost) {
if (roundDown(cost)%10 >= 5 || roundDown(cost)%10 == 0 ) {
return String.format("%.2f", cost) + " рублей";
}
else if (roundDown(cost)%10 == 1) {
return String.format("%.2f", cost) + " рубль";
}
else {
return String.format("%.2f", cost) + " рубля";
}
}
}