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
98 lines (89 loc) · 4.61 KB
/
Main.java
File metadata and controls
98 lines (89 loc) · 4.61 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
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
ArrayList<Car> cars = new ArrayList<>();
Race race = new Race("24 часа Ле-Мана", 24, 3);
Scanner usrInput = new Scanner(System.in);
System.out.println("Добро пожаловать на одну из самых известных автогонок в мире — «" + race.getRaceTitle() + "»!");
System.out.println("Правила просты:\nНужно придумать " + race.getNumberOfCars() + " машины и столкнуть их в головокружительной " +
race.getRaceTime() + "-часовой гонке!");
for (int i = 0; i < race.getNumberOfCars(); i++) {
System.out.println(i + 1 + " машина: ");
System.out.print("Введите название: ");
String carName = checkUsrNameInput(usrInput, cars);
System.out.print("Введите скорость (не может быть меньше 1 и больше 250 км/ч): ");
int carSpeed = checkUsrSpeedInput(usrInput);
Car car = new Car(carName, carSpeed);
cars.add(car);
}
race.setCars(cars); //не знаю, правильно это или нет, может проще было бы использовать массив не из класса Race, а тот, который я создал в main
System.out.println("Да начнется гонка!!!");
System.out.println("Выясняем победителя..");
Car fastestCar = race.calculateFastestCar();
System.out.println("Победитель: " + fastestCar.getName() + "!!!");
}
private static String checkUsrNameInput(Scanner usrInput, ArrayList<Car> cars) {
boolean isValid = false;
String carName = null;
while (!isValid) {
carName = usrInput.nextLine();
if (carName.trim().isEmpty()) {
System.out.print("Пустая строка, введите пожалуйста название автомобиля: ");
} else if (isNumeric(carName)) {
System.out.print("Название не должно состоять только из цифр, попробуйте еще раз: ");
} else if (!isSpecialSymbols(carName)) {
System.out.print("В названии не должно быть спец-символов, попробуйте еще раз: ");
} else if (isCarNamesEquals(cars, carName)) {
System.out.print("Машина с таким названием уже есть, введите другое: ");
} else {
isValid = true;
}
}
return carName;
}
private static int checkUsrSpeedInput(Scanner usrInput) {
boolean isValid = false;
int carSpeed = 0;
while (!isValid) {
try {
carSpeed = usrInput.nextInt();
usrInput.nextLine();
if (carSpeed > 0 && carSpeed <= 250) {
isValid = true;
} else {
System.out.print("Скорость не может быть меньше 1 и больше 250 км/ч. Попробуйте еще раз: ");
}
} catch (Exception ex) {
System.out.print("Некорректная скорость. Попробуйте еще раз: ");
usrInput.nextLine();
}
}
return carSpeed;
}
//хотел сделать так, чтобы название не состояло только из цифр, но если ввести число,
//которое не вмещает тип long, то проверка не срабатывает, хотелось бы понять как это обойти
private static boolean isNumeric(String str) {
try {
Long.parseLong(str);
return true;
} catch (NumberFormatException e) {
return false;
}
}
private static boolean isSpecialSymbols(String str) {
return str.matches("[a-zA-Zа-яА-Я0-9 ]+");
}
private static boolean isCarNamesEquals(ArrayList<Car> cars, String carName) {
boolean isEquals = false;
if (!cars.isEmpty()) {
for (Car car : cars) {
if (car.getName().equals(carName)) {
isEquals = true;
break;
}
}
}
return isEquals;
}
}