From d92902f3349e764433e89908f85885fe9519f3a7 Mon Sep 17 00:00:00 2001 From: DmitriiProshutinskii Date: Tue, 23 Dec 2025 17:48:52 +0300 Subject: [PATCH 1/2] Project 1 commit --- src/main/java/Car.java | 9 ++++++ src/main/java/Main.java | 16 ++++++++- src/main/java/Race.java | 72 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 96 insertions(+), 1 deletion(-) create mode 100644 src/main/java/Car.java create mode 100644 src/main/java/Race.java diff --git a/src/main/java/Car.java b/src/main/java/Car.java new file mode 100644 index 000000000..1ec479c7f --- /dev/null +++ b/src/main/java/Car.java @@ -0,0 +1,9 @@ +public class Car { + String name; + int speed; + + public Car(String name, int speed) { + this.name = name; + this.speed = speed; + } +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java index db9356a08..9b29c7445 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,6 +1,20 @@ +import java.util.Scanner; public class Main { + public static void main(String[] args) { - System.out.println("Hello world!"); + Scanner scanner = new Scanner(System.in); + + final int amountOfCars = 3; + + Race race = new Race(); + System.out.println("Приветствуем тебя на гонке 24 часа Le Mans. Для того, чтобы узнать, кто победит, давай добавим машины в гонку"); + System.out.printf("Количество машин в этой гонке: %d%n", amountOfCars); + + for (int i=0; i < amountOfCars; i++) { + System.out.printf("Добавим машину номер %d%n", i+1); + race.addCarToRace(scanner); + } + race.whoIsWinner(); } } \ No newline at end of file diff --git a/src/main/java/Race.java b/src/main/java/Race.java new file mode 100644 index 000000000..743362ce1 --- /dev/null +++ b/src/main/java/Race.java @@ -0,0 +1,72 @@ +import java.util.HashSet; +import java.util.Optional; +import java.util.Scanner; + +public class Race { + private final HashSet cars = new HashSet<>(); + + void addCarToRace(Scanner scanner) { + String name = getName(scanner); + int speed = getSpeed(scanner); + + Car newCar = new Car(name, speed); + cars.add(newCar); + System.out.println("Машина зарегистрирована на гонку\n"); + } + + private String getName(Scanner scanner) { + System.out.println("Введите название машины:"); + String name = ""; + while (true) { + // Чтобы давать названия автомобилям не в одну слитную строку. Например, "Летающий Пегас" + name = scanner.nextLine(); + if (name.isEmpty()) { + System.out.println("У машины должно быть непустое имя. Попробуйте еще раз"); + } else { + break; + } + } + return name; + } + + private int getSpeed(Scanner scanner) { + int speed = -1; + System.out.println("Введите скорость машины."); + System.out.println("Скорость должна быть целым значением в пределах от 1 до 250 включительно"); + while (true) { + String speedString = scanner.nextLine(); + if (speedString.isEmpty()) { + System.out.println("Пустое значение. Скорость должна быть целым значением в пределах от 1 до 250 включительно. Попробуйте еще раз"); + continue; + } + try { + speed = Integer.parseInt(speedString); + if (speed > 0 && speed <= 250) { + break; + } else { + System.out.println("Скорость должна быть целым значением в пределах от 1 до 250 включительно. Попробуйте еще раз"); + } + } catch(NumberFormatException nfe) { + System.out.println("Кажется, вы ввели не целое число. Попробуйте еще раз: Введите скорость от 1 до 250 включительно"); + } + } + return speed; + } + + void whoIsWinner() { + if (cars.isEmpty()) { + System.out.println("В гонке нет машин. Добавьте больше машин"); + return; + } + // Мы берем случайное значение из Set'а, чтобы проиницилизировать первую переменную + Car leader = cars.iterator().next(); + for(Car car : cars) { + // Потому что скорость * время = расстояние. Время для всех одинаково. Значит чем больше скорость, тем больше расстояние + if (car.speed > leader.speed) { + leader = car; + } + } + int leaderDistance = leader.speed * 24; + System.out.printf("Победитель %s, который проехал %d километров за 24 часа", leader.name, leaderDistance); + } +} From 517a65b1980cfe4a8b4954d639e1034e713e6706 Mon Sep 17 00:00:00 2001 From: DmitriiProshutinskii Date: Sun, 4 Jan 2026 20:41:14 +0300 Subject: [PATCH 2/2] Code review fixes --- src/main/java/Car.java | 4 ++-- src/main/java/Main.java | 7 ++++--- src/main/java/Race.java | 14 ++++++++------ 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/main/java/Car.java b/src/main/java/Car.java index 1ec479c7f..750950525 100644 --- a/src/main/java/Car.java +++ b/src/main/java/Car.java @@ -1,6 +1,6 @@ public class Car { - String name; - int speed; + final String name; + final int speed; public Car(String name, int speed) { this.name = name; diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 9b29c7445..af03db945 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,17 +1,18 @@ import java.util.Scanner; public class Main { + private static final int AMOUNT_OF_CARS = 3; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); - final int amountOfCars = 3; + Race race = new Race(); System.out.println("Приветствуем тебя на гонке 24 часа Le Mans. Для того, чтобы узнать, кто победит, давай добавим машины в гонку"); - System.out.printf("Количество машин в этой гонке: %d%n", amountOfCars); + System.out.printf("Количество машин в этой гонке: %d%n", AMOUNT_OF_CARS); - for (int i=0; i < amountOfCars; i++) { + for (int i=0; i < AMOUNT_OF_CARS; i++) { System.out.printf("Добавим машину номер %d%n", i+1); race.addCarToRace(scanner); } diff --git a/src/main/java/Race.java b/src/main/java/Race.java index 743362ce1..d571fae18 100644 --- a/src/main/java/Race.java +++ b/src/main/java/Race.java @@ -1,8 +1,9 @@ import java.util.HashSet; -import java.util.Optional; import java.util.Scanner; public class Race { + private static final int MIN_CAR_SPEED = 0; + private static final int MAX_CAR_SPEED = 290; private final HashSet cars = new HashSet<>(); void addCarToRace(Scanner scanner) { @@ -32,22 +33,23 @@ private String getName(Scanner scanner) { private int getSpeed(Scanner scanner) { int speed = -1; System.out.println("Введите скорость машины."); - System.out.println("Скорость должна быть целым значением в пределах от 1 до 250 включительно"); + String getSpeedFormat = "Скорость должна быть целым значением больше %d и меньше или равно %d"; + System.out.printf(getSpeedFormat + "\n", MIN_CAR_SPEED, MAX_CAR_SPEED); while (true) { String speedString = scanner.nextLine(); if (speedString.isEmpty()) { - System.out.println("Пустое значение. Скорость должна быть целым значением в пределах от 1 до 250 включительно. Попробуйте еще раз"); + System.out.printf("Пустое значение" + getSpeedFormat + "Попробуйте еще раз\n", MIN_CAR_SPEED, MAX_CAR_SPEED); continue; } try { speed = Integer.parseInt(speedString); - if (speed > 0 && speed <= 250) { + if (speed > MIN_CAR_SPEED && speed <= MAX_CAR_SPEED) { break; } else { - System.out.println("Скорость должна быть целым значением в пределах от 1 до 250 включительно. Попробуйте еще раз"); + System.out.printf(getSpeedFormat + ". Попробуйте еще раз\n", MIN_CAR_SPEED, MAX_CAR_SPEED); } } catch(NumberFormatException nfe) { - System.out.println("Кажется, вы ввели не целое число. Попробуйте еще раз: Введите скорость от 1 до 250 включительно"); + System.out.printf("Кажется, вы ввели не целое число. Попробуйте еще раз: " + getSpeedFormat + "\n", MIN_CAR_SPEED, MAX_CAR_SPEED); } } return speed;