Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions src/main/java/Frases.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
public class Frases {
String welcome = "Добро пожаловать!" +
"\nЭто программа для определения победителя в 24-часовой гонке \"Лиман\"" +
"\nДля этого вам нужно создать три автомобиля, указав их наименование и скорость." +
"\nПриступим? (Да - продолжить, Нет - конец программы)\n";

String exit = "Будем рады видеть вас снова. Возвращайтесь поскорее!";
}
34 changes: 33 additions & 1 deletion src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,38 @@
import java.util.Scanner;

public class Main {

public static void main(String[] args) {
System.out.println("Hello world!");
Scanner scanner = new Scanner(System.in);
Frases frases = new Frases(); // Инициализируем текстовки
Race race = new Race(); // Инициализиуем гонку
String input; // Переменная для сохранения ввода из консоли
boolean whileExitFlag = true; // Флаг для выхода из бесконечных циклов

System.out.println(frases.welcome);

while (whileExitFlag) {
input = scanner.nextLine();
switch (input.toLowerCase()) {
case "да":
whileExitFlag = false;
break;
case "нет":
System.out.println(frases.exit);
System.exit(0);
break;
default:
System.out.println("\"Да\" - продолжить, \"Нет\" - конец программы");
break;
}
}

while (race.vehicles.size() != 3) {
Vehicle vehicle = new Vehicle(scanner);
race.addVehicleToRace(vehicle);
}

race.doRace();
//race.printRaceInfo(); // Вывести информацию о гонке
}
}
65 changes: 65 additions & 0 deletions src/main/java/Race.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
import java.util.HashMap;

public class Race {
String raceName = "24 часа Леман";
Vehicle raceWinner;
HashMap<String, Vehicle> vehicles = new HashMap<>(); // Машины для участия в гонке

boolean checkDuplicatesVehicleName(Vehicle vehicle) {
return this.vehicles.containsKey(vehicle.vehicleName);
}

boolean checkDuplicatesVehicleSpeed(Vehicle vehicle) {
for (String key : vehicles.keySet()) {
if (vehicle.vehicleSpeed == vehicles.get(key).vehicleSpeed) {
return true;
}
}
return false;
}

void addVehicleToRace(Vehicle vehicle) {
if (checkDuplicatesVehicleName(vehicle)) {
System.out.println("\nАвтомобиль \"" + vehicle.vehicleName + "\" уже в списке." +
"\nЗначение скорости обновлено на: " + vehicle.vehicleSpeed + "\n");
this.vehicles.put(vehicle.vehicleName, vehicle);
} else if (checkDuplicatesVehicleSpeed(vehicle)) {
System.out.println("\nАвтомобиль \"" + vehicle.vehicleName + "\" нельзя добавить в гонку, " +
"\nт.к. в нём уже есть автомобиль с такой же скоростью. " +
"\nПобедитель должен быть только один. " +
"\nИзмените скорость автомобиля и добавьте его повторно.\n");
} else {
this.vehicles.put(vehicle.vehicleName, vehicle);
}
}

void printRaceInfo() {
System.out.println("\n-----===== Информация о гонке ======------");
System.out.println("Гонка: " + this.raceName);
System.out.println("Количество заявленных автомобилей: " + this.vehicles.size());
for (String key : this.vehicles.keySet()) {
System.out.println(vehicles.get(key).getVehicleInfo());
}
System.out.println("-----===== Конец ======------\n");
}

void doRace() {
System.out.println("\n-----===== Гонка началась ======------");
System.out.println("Самая быстрая машина: " + this.raceWinnerCalculate().vehicleName);
System.out.println("-----===== Гонка завершена ======------\n");

}

Vehicle raceWinnerCalculate() {
int count = 1;
for (String key : vehicles.keySet()) {
if (count == 1) {
this.raceWinner = vehicles.get(key);
count++;
} else if (this.raceWinner.vehicleSpeed < vehicles.get(key).vehicleSpeed) {
this.raceWinner = vehicles.get(key);
}
}
return this.raceWinner;
}
}
66 changes: 66 additions & 0 deletions src/main/java/Vehicle.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import java.util.Scanner;

class Vehicle {
String vehicleName;
double vehicleSpeed;
double vehicleMinSpeed = 0d;
double vehicleMaxSpeed = 250d;

Vehicle(Scanner scanner) {
System.out.println("\n-----===== Созадём автомобиль =====-----");
vehicleName = askVehicleName(scanner);
vehicleSpeed = askVehicleSpeed(scanner);
System.out.println("-----===== Автомобиль создан =====-----\n");
}

String getVehicleInfo() {
return "Название автомобиля: " + this.vehicleName +
"\nСкорость автомобиля: " + this.vehicleSpeed + " км/ч";
}

String askVehicleName(Scanner scanner) {
System.out.println("Введите название автомобиля." +
"\nПример: \"Машина 1\"" +
"\n(макс 32 символа. Мы сократим авматоматически, если потребуется.)");

String name = scanner.nextLine();

if (name.length() > 32) {
name = name.trim().substring(0, 32);
System.out.println("\nЭто длинное название мы сократили до: " + name);
}
return name;
}

double askVehicleSpeed(Scanner scanner) {
double speed = 0d; // Переменная для сохранения скорости автомобиля
boolean inpIsInt = false;
boolean inpIsDouble = false;
do {
System.out.printf("\nВведите скорость автомобиля.\nЧисло больше %s и до %s включительно:" +
"\nпример: 23 или 249.58\n", vehicleMinSpeed, vehicleMaxSpeed);

String input = scanner.nextLine();

try {
speed = Integer.parseInt(input) * 1.0;
inpIsInt = true;
} catch (Exception ignored) {
}

try {
speed = Double.parseDouble(input);
inpIsDouble = true;
} catch (Exception ignored) {
}

if ((inpIsInt || inpIsDouble) && (speed > vehicleMinSpeed && speed <= vehicleMaxSpeed)) {
break;
} else {
System.out.println("Ожидалось другое значение.");
}
} while (true);

return speed;
}
}