Repository navigation
Expand file tree
/
Copy pathDataInput.java
More file actions
88 lines (82 loc) · 5.06 KB
/
Copy pathDataInput.java
File metadata and controls
88 lines (82 loc) · 5.06 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
import java.util.ArrayList;
import java.util.Scanner;
public class DataInput {
// Ввод кол-ва человек
public int numberOfPeople (Scanner scanner) {
int numberOfPersons;
final String STR_QUERY = "На сколько человек необходимо разделить счёт:";
final String STR_NOTE = "\nВведите целое число больше 1.";
do {
System.out.println(STR_QUERY);
while (!scanner.hasNextInt()) {
System.out.println(new StringBuilder().append("Это не целое число!").append(STR_NOTE).append("\n").append(STR_QUERY));
scanner.next();
}
numberOfPersons = scanner.nextInt();
if (numberOfPersons < 0) {
System.out.println(new StringBuilder().append("Это отрицательное число!").append(STR_NOTE));
} else if (numberOfPersons == 0) {
System.out.println(new StringBuilder().append("На 0 делить нельзя!").append(STR_NOTE));
} else if (numberOfPersons == 1) {
System.out.println(new StringBuilder().append("Нет смысла делить. Весь счет оплачивать Вам!").append(STR_NOTE));
}
} while (numberOfPersons <= 1);
return numberOfPersons;
}
// Ввод товара
public ArrayList<Product> productEntry (Scanner scanner) {
final String STR_END_INPUT = "Завершить"; // Кодовое слово для завершения ввода
ArrayList<Product> listOfProducts = new ArrayList<>(); // Массив для хранения содержимого строк счета
do {
String name;
float price;
boolean empty;
do {
// Ввод наименования товара
System.out.println("Введите наименование товара:");
name = scanner.next();
// Проверка, что строка не пустая. Кажется она не требуется (при пустой строке scanner будет повторять запрос на ввод), но на всякий случай
empty = name.isEmpty();
if (empty) {
System.out.println("У товара должно быть наименование, пустые строки не допускаются!");
}
} while (empty);
// Ввод и проверка цены
price = enteringAndCheckingPrices(scanner);
Product lb = new Product(name, price); // Создание объекта для хранения данных строки счета
listOfProducts.add(lb); // и добавление его в массив
System.out.println("Товар успешно добавлен.");
System.out.println("Хотите добавить еще один товар?\nДля завершения процесса добавления товаров введите \"Завершить\":");
} while (!scanner.next().equalsIgnoreCase(STR_END_INPUT));
return listOfProducts;
}
// Ввод и проверка цены
private float enteringAndCheckingPrices (Scanner scanner) {
final int DIGITS_AFTER_DOT = 2; // Максимальное кол-во цифр после десятичной точки
float price;
String s = "\nОжидается число больше 0 в формате \"0.00\".";
String s1 = "Введите стоимость товара:";
do {
System.out.println(s1);
// Проверка случайных символов
while (!scanner.hasNextDouble()) {
System.out.println("Это вообще не число!" + s + "\n" + s1);
scanner.next();
}
price = scanner.nextFloat();
// Проверка: цена > 0
if (price == 0) {
System.out.println("Бесплатный товар? Хмм..." + s);
} else if (price <= 0) {
System.out.println("Ого! Вы где нашли такие цены?" + s);
}
// Проверка - у цены должно быть две цифры после десятичной точки
String[] strPrice = String.valueOf(price).split("\\.", 2); // Разбиваем строку на массив из 2-х строк: целая часть и дробная
if (strPrice[1].length() > DIGITS_AFTER_DOT) { // Если в дробной части больше 2 знаков
System.out.println("Многовато копеек!" + s);
price = 0.0f;
}
} while (price <= 0);
return price;
}
}