From de63cd14b5c56507109b1ad3add3b86d53ac3c74 Mon Sep 17 00:00:00 2001 From: aurilaus Date: Thu, 27 Jun 2024 16:20:28 +0300 Subject: [PATCH] HomeWork #1 --- src/main/java/Main.java | 13 +++- src/main/java/constructor/CarConstructor.java | 30 +++++++++ src/main/java/constructor/Race.java | 62 +++++++++++++++++++ src/main/java/models/Car.java | 11 ++++ 4 files changed, 113 insertions(+), 3 deletions(-) create mode 100644 src/main/java/constructor/CarConstructor.java create mode 100644 src/main/java/constructor/Race.java create mode 100644 src/main/java/models/Car.java diff --git a/src/main/java/Main.java b/src/main/java/Main.java index a9198c43..9bf5282b 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,8 +1,15 @@ +import constructor.Race; +import constructor.CarConstructor; + public class Main { public static void main(String[] args) { - // ваш код начнется здесь - // вы не должны ограничиваться только классом Main и можете создавать свои классы по необходимости - System.out.println("Привет Мир"); + CarConstructor constructor = new CarConstructor(); + Race race = new Race(constructor); + while (constructor.carsSize() < 3) { + race.prepare(); + } + race.getFasterCar(); } + } diff --git a/src/main/java/constructor/CarConstructor.java b/src/main/java/constructor/CarConstructor.java new file mode 100644 index 00000000..cf2db918 --- /dev/null +++ b/src/main/java/constructor/CarConstructor.java @@ -0,0 +1,30 @@ +package constructor; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import models.Car; + +public class CarConstructor { + + private final Set cars = new HashSet<>(); + + public boolean addCar(String name, int speed) { + Car newCar = new Car(name, speed); + if (cars.stream().anyMatch(car -> car.name.equals(name))) { + System.out.println("Автомобиль с именем '" + name + "' уже существует."); + return false; + } + return cars.add(newCar); + + } + + public int carsSize() { + return cars.size(); + } + + public Set getCars() { + return Collections.unmodifiableSet(cars); + } +} diff --git a/src/main/java/constructor/Race.java b/src/main/java/constructor/Race.java new file mode 100644 index 00000000..6ba25940 --- /dev/null +++ b/src/main/java/constructor/Race.java @@ -0,0 +1,62 @@ +package constructor; + +import java.util.Scanner; + +import models.Car; + +public class Race { + private static final int MAX_SPEED = 250; + private static final int MIN_SPEED = 0; + private static final int HOURS_IN_DAY = 24; + + private final CarConstructor constructor; + private final Scanner scanner; + + public Race(CarConstructor constructor) { + this.constructor = constructor; + this.scanner = new Scanner(System.in); + } + + public void prepare() { + String name = carName(); + int speed = carSpeed(); + constructor.addCar(name, speed); + } + + private String carName() { + System.out.println(formatMessage("- Введите название машины №%d")); + return scanner.next(); + } + + private int carSpeed() { + while (true) { + System.out.println(formatMessage("- Введите скорость машины №%d")); + try { + int speed = Integer.parseInt(scanner.next()); + if (speed >= MIN_SPEED && speed <= MAX_SPEED) { + return speed; + } else { + System.out.println("- Неправильная скорость."); + } + } catch (NumberFormatException e) { + System.out.println("- Пожалуйста, введите целое число."); + } + } + } + + private String formatMessage(String message) { + return String.format(message, constructor.carsSize() + 1); + } + + public void getFasterCar() { + Car fasterCar = constructor.getCars().stream() + .max((c1, c2) -> Integer.compare(c1.speed * HOURS_IN_DAY, c2.speed * HOURS_IN_DAY)) + .orElse(null); + + if (fasterCar != null) { + System.out.printf("- Самая быстрая машина: %s%n", fasterCar.name); + } else { + System.out.println("- Нет машин в списке."); + } + } +} diff --git a/src/main/java/models/Car.java b/src/main/java/models/Car.java new file mode 100644 index 00000000..4f34f760 --- /dev/null +++ b/src/main/java/models/Car.java @@ -0,0 +1,11 @@ +package models; + +public class Car { + public String name; + public int speed; + + public Car(String name, int speed) { + this.name = name; + this.speed = speed; + } +}