forked from Yandex-Practicum/Java-Module-Project-YP
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMain.java
More file actions
115 lines (111 loc) · 5.64 KB
/
Main.java
File metadata and controls
115 lines (111 loc) · 5.64 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
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
static Scanner scan = new Scanner(System.in);
public static void main(String[] args) {
calc (guestNum(), goodCart());
}
private static void calc(int numOfGuests, ArrayList<Goods> goodsArrayList) {
System.out.println("Список товаров:");
double sum = 0.0;
for (Goods good : goodsArrayList) {
System.out.println(good.name);
sum += good.price;
}
double eachSum=Math.round(sum*100/numOfGuests);
System.out.printf("Итого каждый гость должен заплатить %.2f %s\n", eachSum/100, rubl(eachSum/100));
}
private static int guestNum() {
System.out.println("На сколько человек разделить счет?");
while (true) {
if (scan.hasNextInt()) {
int numOfGuests = scan.nextInt();
if (numOfGuests == 1) {
System.out.println("Ваш ответ: \'1\'. Отсутствует необходимость делить счет." +
"\nВведите корректное количество гостей.");
} else if (numOfGuests < 1) {
System.out.println("Ваш ответ: \'" + numOfGuests +
"\'. Нужно целое число > 1. " +
"\nВведите корректное количество гостей.");
} else {
scan.nextLine();
return numOfGuests;
}
} else {
String str = scan.nextLine().toString();
System.out.println("Ваш ответ: \'" + str + "\'. Необходимо ввести целое число > 1." +
"\nВведите корректное количество гостей.");
}
}
}
private static ArrayList<Goods> goodCart() {
System.out.println("Введите название товара и его стоимость в формате: " +
"\'Название рубли.копейки\' Например: суп 6.00. Также можно ввести: суп 6,00");
ArrayList<Goods> goodsArrayList = new ArrayList<>();
String strGoodInfo;
double sum = 0.0;
while (true) {
strGoodInfo = scan.nextLine().trim();
int lastSpaseIndex = strGoodInfo.lastIndexOf(' ');
if (lastSpaseIndex == -1)//| strGoodInfo.lastIndexOf(' ')>=strGoodInfo.length()-1)
{
System.out.println("Не полная информация о товаре.\nВведите корректные данные");
}
else {
int lastPointIndex = strGoodInfo.replace(',', '.').substring(lastSpaseIndex).indexOf('.');
if (strGoodInfo.replace(',', '.').lastIndexOf('.') < strGoodInfo.length() - 3 & lastPointIndex != -1)
{ System.out.println("Ошибка при вводе стоимости.\nВведите корректные данные");
}
else {
String strPrice = new String(strGoodInfo.substring(strGoodInfo.lastIndexOf(' ')));
try {
double price = Double.parseDouble(strPrice.replace(',', '.').trim());
sum += price;
String name = strGoodInfo.substring(0, strGoodInfo.lastIndexOf(" "));
Goods good = new Goods(name, price);
goodsArrayList.add(good);
System.out.printf("Товар %s по цене %.2f добавлен успешно!\nПромежуточный итог: %.2f %s", name, price, sum, rubl(sum));
System.out.println("\nХотите ли добавить ещё один товар?");
if (scan.nextLine().toString().trim().toLowerCase().equals("завершить")) {
break;
}
} catch (NumberFormatException e) {
System.out.println("Ошибка при вводе стоимости товара. Введите корректные данные");
}
}
}
}
return goodsArrayList;
}
private static String rubl (double sum)
{
String strSum = sum + "";
int k = strSum.indexOf('.') - 1;
if (k > 0) {
if (strSum.charAt(k - 1) == '1') {
return "рублей";
}
}
switch (strSum.charAt(k)) {
case '1': return ("рубль");
case '2':
case '3':
case '4': return ("рубля");
default: return ("рублей");
}
}
}
class Goods {
String name;
double price;
Goods(String name, double price) {
this.name = name;
this.price = price;
}
}
/* Предполагаю, что изначальная задача была проще, можно было
дать запрос название товаров и цену на разных строках (и проверять hasNextDouble()
и затем считать методом nextDouble(). Можно было не обрабатывать запятые,
и забытые копейки в шаблоне "0.00". Но мне показалась, что так задача
приближена интеренее и приближена к жизни.
*/