Repository navigation
Expand file tree
/
Copy pathMain.java
More file actions
116 lines (104 loc) · 3.72 KB
/
Copy pathMain.java
File metadata and controls
116 lines (104 loc) · 3.72 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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int numPersons = askNumPersons(input);
CheckCalculator calculator = new CheckCalculator(numPersons);
int numAdded = 0;
do {
String name = askName(input);
double price = askPrice(input);
calculator.addCheckItem(name,price);
System.out.println("Добавленные товары:\n"+name);
numAdded++;
} while (askContinue(input));
if (numAdded > 0) {
calculator.printCheckItems();
double sumPerOne = calculator.calculate();
rublesFormatter fmt = new rublesFormatter();
System.out.printf("%s с каждого человека\n", fmt.format(sumPerOne));
}
}
public static int askNumPersons(Scanner scanner) {
System.out.println("Введите количество человек (больше 1), между которыми разделить счет");
int num;
while (true) {
num = parsePositiveInt(scanner);
if (num <= 1) {
System.out.println("Неверное количество персон, введите число больше 1");
} else {
break;
}
}
return num;
}
public static String askName(Scanner scanner) {
System.out.println("Введите название блюда");
return scanner.next();
}
public static double askPrice(Scanner scanner) {
double price = 0.0;
while (true) {
System.out.println("Введите стоимость (руб.коп)");
price = parseDouble(scanner);
if (price < 0.0) {
System.out.println("Некорректное значение");
} else {
break;
}
}
return price;
}
public static boolean askContinue(Scanner scanner) {
System.out.println("Хотите что-то добавить? Напишите любой символ для продолжения, 'завершить' для выхода");
String input = scanner.next();
return !input.equalsIgnoreCase("завершить");
}
static int parsePositiveInt(Scanner scanner) {
String input = scanner.next().strip();
for (Character c: input.toCharArray()) {
if (!Character.isDigit(c)) {
return -1;
}
}
return Integer.parseInt(input);
}
static double parseDouble(Scanner scanner) {
String input = scanner.next().strip();
boolean haveDot = false;
for (Character c: input.toCharArray()) {
if (!Character.isDigit(c)) {
if (c.equals('.') && !haveDot) {
haveDot = true;
continue;
} else {
return -1.0;
}
}
}
return Double.parseDouble(input);
}
}
class rublesFormatter {
public String format(double num) {
return String.format("%.2f %s",num,numToRublesWord(Double.valueOf(num).intValue()));
}
public String numToRublesWord(int num) {
num = num % 100;
if ((num > 4) && (num < 20)) {
return "рублей";
} else {
num = num % 10;
switch (num) {
case 1:
return "рубль";
case 2:
case 3:
case 4:
return "рубля";
default:
return "рублей";
}
}
}
}