Repository navigation
Expand file tree
/
Copy pathRaceManager.java
More file actions
112 lines (99 loc) · 7.24 KB
/
Copy pathRaceManager.java
File metadata and controls
112 lines (99 loc) · 7.24 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
import java.util.Scanner;
// В данном классе организована логика работы программы
class RaceManager {
Scanner scanner = new Scanner(System.in); // Для обработки ввода
private final int minSpeedCar = 1; //Минимальная скорость доступная для ввода
private final int maxSpeedCar = 250; // Максимальная скорость доступная для ввода
private final RaceCar[] raceCars = new RaceCar[3]; // Массив на три автомобиля (из условия задачи)
// Массив позволяет жестко привязаться к порядковому номеру, таким образом даже если автомобили
//будут с одинаковыми названиями, их можно будет идентифицировать.
// Метод для запуска процесса гонки
public void run() {
int distanceWinnerCar = 0; // Хранит расстояние пройденное победителем (победителями)
showHelloMessage();
for (int i = 0; i < 3; i++) { // Заполняем массив автомобилями
notifyStartInput(i + 1);
raceCars[i] = new RaceCar(inputNameCar(), inputSpeedCar());
}
for (int i = 0; i < 3; i++) { // Определяем расстояние пройденное победителем (победителями)
if (raceCars[i].getDistanceCar() > distanceWinnerCar) {
distanceWinnerCar = raceCars[i].getDistanceCar();
}
}
announceResults();
for (int i = 0; i < 3; i++) { // Определяем победителя (победителей)
// для этого сравниваем расстояние пройденное автомобилем с победным расстоянием
// Таким образом, победителей может быть больше, чем один
if (raceCars[i].getDistanceCar() == distanceWinnerCar) {
showWinnerCar(i, raceCars[i]);
}
}
}
// Метод выводящий приветственное сообщение
private void showHelloMessage() {
System.out.println("_____________________________________________");
System.out.println("Приветствую вас на «24 часа Ле-Мана»");
System.out.println("_____________________________________________");
System.out.println();
System.out.println("Вам необходимо ввести данные трёх автомобилей");
}
// Сообщаем, что далее выведем результат
private void announceResults() {
System.out.println("_____________________________________________");
System.out.println("В гонке «24 часа Ле-Мана» победил (победили):");
System.out.println("_____________________________________________");
System.out.println();
}
// Метод уведомляющий о начале ввода данных на автомобиль с конкретным порядковым номером
private void notifyStartInput(int numberCar) {
System.out.println();
System.out.println("Запрос данных автомобиля № " + numberCar);
System.out.println();
}
private String inputNameCar() {
String nameCar; // Переменная в которую получаем названия автомобиля
System.out.println("Введите название автомобиля:");
while (true) { // Цикл будет работать до ввода корректного значения скорости
nameCar = scanner.nextLine().trim(); // Получаем название автомобиля без пробелов по краям
if (nameCar.isEmpty()) {
System.out.println("Название автомобиля не введено");
System.out.println("Попробуйте еще раз:");
} else {
break;
}
}
System.out.println("Название автомобиля введено успешно");
return nameCar; // Возвращаем название из метода
}
// Метод для получения скорости автомобиля от пользователя
private int inputSpeedCar() {
System.out.println("Введите скорость автомобиля (целое число) от 1 до 250 км/ч:");
int speedCar; // Скорость автомобиля - может быть только целым числом от 1 до 250
while (true) { // Цикл будет работать до ввода корректного значения скорости
try { // Проверяем корректность ввода скорости
speedCar = Integer.parseInt( scanner.nextLine().trim()); // Если скорость не целое число - будет ошибка
// строка лояльна к пробелам в начале и конце строки
if (speedCar < minSpeedCar || speedCar > maxSpeedCar) {
throw new IllegalArgumentException(); // Если скорость вне допустимого диапазона - бросаем ошибку
}
System.out.println("Скорость автомобиля введена успешно");
break; // Значение скорости корректно - выходим из цикла
} catch (Exception e) { // Ловим ошибки. Выводим сообщение
System.out.println("Скорость автомобиля должна быть целым числом от 1 до 250 км/ч");
System.out.println("Введите скорость автомобиля ещё раз:");
}
}
return speedCar; // Передаем скорость автомобиля из метода
}
// Метод возвращающий данные победителя.
// В случае подачи на вхд Null будут проблемы.
// Но организация проверки усложнит логику - оставил так
private void showWinnerCar(int numberWinnerCar, RaceCar winnerCar) {
System.out.println("Автомобиль № " + (numberWinnerCar + 1)); // Преобразовал строку в скобках в int
System.out.println("Название автомобиля: " + winnerCar.getNameCar());
System.out.println("Скорость автомобиля: " + winnerCar.getSpeedCar() + " км/ч");
System.out.println("За время " + winnerCar.getTimeRace() + " ч победитель проехал " +
winnerCar.getDistanceCar() + " км");
System.out.println("_____________________________________________");
}
}