forked from Yandex-Practicum/Java-Module-Project-YP
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRace.java
More file actions
87 lines (77 loc) · 3.09 KB
/
Race.java
File metadata and controls
87 lines (77 loc) · 3.09 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
import java.util.HashSet;
import java.util.Scanner;
public class Race {
private static final int timeInHours = 24;
private final int maxCarsCounter;
HashSet<Car> cars;
Leader leader;
public Race(int maxCarsCounter) {
cars = null;
leader = null;
this.maxCarsCounter = maxCarsCounter;
}
public void prepareCars() {
cars = new HashSet<>();
leader = null;
for(int i = 0; i < maxCarsCounter;) {
Car car = createCar();
if(!cars.add(car)) {
System.out.println("Автомобиль '" + car.name + "' уже заявлен. Переменуйте автомобиль.");
continue;
} else
System.out.println("Автомобиль '" + car.name + "' со скоростью " + car.speed + " км/ч добавлен.");
++i;
}
}
private Car createCar() {
Scanner scanner = new Scanner(System.in);
Car car = new Car();
while (true) {
try {
if (car.name == null) {
System.out.println("Введите название автомобиля");
car.name = scanner.next();
}
if (car.speed == null) {
System.out.println("Введите скорость автомобиля " + car.name);
if (!car.setSpeed(scanner.nextInt())) {
System.out.println("Скорость введена неверно. Введите значение от " + Car.MIN_SPEED + " до " + Car.MAX_SPEED);
continue;
}
}
break;
} catch (java.util.InputMismatchException e) {
String rootCause = scanner.next();
System.out.println("Что-то пошло не так из-за ввода '" + rootCause + "'");
} catch (Exception e) {
e.printStackTrace();
System.out.println("Что-то пошло не так");
}
System.out.println("Давайте повторим ввод");
}
return car;
}
public void performRace() {
leader = null;
}
public void findLeader() throws Exception {
if(cars == null)
throw new Exception("Нет машин, которые участвуют в гонке. Найти лидера не получится.");
for(Car car: cars) {
final int carDistance = car.speed * timeInHours;
if(leader == null) {
leader = new Leader(car.name, carDistance);
}
else {
if (leader.distance < carDistance) {
leader = new Leader(car.name, carDistance);
}
}
}
}
public Leader getLeader() throws Exception {
if(leader == null)
throw new Exception("Лидер гонки не определен. Возможно гонка не была завершена.");
return leader;
}
}