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
91 changes: 90 additions & 1 deletion src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,95 @@
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;

import RaceManager.RaceManager;
import model.Car;
import model.RaceResult;

public class Main {
private final static int CAR_COUNT = 3;
private final static Scanner scanner = new Scanner(System.in);

public static void main(String[] args) {
System.out.println("Hello world!");
RaceManager raceManager = new RaceManager();


System.out.println("Давно тебя не было на уличных гонках!");
System.out.println("Введи параметры тачек");
System.out.println();

List<Car> cars = createCars();

List<RaceResult> results = raceManager.calculateRaceResult(cars);
printRaceResult(results, raceManager.winner);
}

private static List<Car> createCars() {
int carNumber = 1;
List<Car> cars = new ArrayList<>(3);

while (carNumber <= CAR_COUNT) {
System.out.printf("Какое имя будет у машины номер %d?", carNumber);
System.out.println();
String name = scanner.next();

System.out.println("А скорость?");

int velocity;

while (true) {
String velocityStr = scanner.next();

try {
velocity = Integer.parseInt(velocityStr);

} catch (NumberFormatException e) {
System.out.println("Ты ввёл какой-то бред, попробуй еще");
continue;
}

if (velocity <= 0) {
System.out.println("Машина должна ехать вперед, а не назад, попробуй еще раз");
} else if (velocity > 250) {
System.out.println("Слишком быстро! Еще раз.");
} else {
break;
}
}

Car car = new Car(name, velocity);

cars.add(car);

if (CAR_COUNT - carNumber != 0) {
System.out.printf("Отлично, осталось сделать машин: %d", CAR_COUNT - carNumber);
System.out.println();
} else {
System.out.println("Погнали!");
}

System.out.println();

carNumber++;
}

return cars;
}

private static void printRaceResult(List<RaceResult> results, Car winner) {
System.out.println("Результаты гонки: ");
System.out.println("=".repeat(100));

for (int i = 0; i < results.size(); i++) {
RaceResult currentResult = results.get(i);
System.out.printf("Место %d. Имя - '%s', проехала - %d км", i + 1
, currentResult.gerCar().getName(), currentResult.getDistance());
System.out.println();
}

System.out.println("=".repeat(100));
System.out.println();
System.out.println("Победитель - " + winner.getName());
}
}
28 changes: 28 additions & 0 deletions src/main/java/RaceManager/RaceManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package RaceManager;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

import model.Car;
import model.RaceResult;

public class RaceManager {
public Car winner;

public List<RaceResult> calculateRaceResult(List<Car> cars) {
cars.sort(Comparator.comparingInt(Car::getVelocity).reversed());

winner = cars.get(0);

List<RaceResult> results = new ArrayList<>(3);

for (Car car : cars) {

RaceResult raceResult = new RaceResult(car, car.getVelocity() * 24);
results.add(raceResult);
}

return results;
}
}
20 changes: 20 additions & 0 deletions src/main/java/model/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package model;

public class Car {
private final String name;

private final int velocity;

public Car(String name, int velocity) {
this.name = name;
this.velocity = velocity;
}

public String getName() {
return name;
}

public int getVelocity() {
return velocity;
}
}
21 changes: 21 additions & 0 deletions src/main/java/model/RaceResult.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package model;

// Дополнительный класс, хранящий все данные о гонке, как по мне так будет красивее
public class RaceResult {
private final Car car;

private final int distance;

public RaceResult(Car car, int distance) {
this.car = car;
this.distance = distance;
}

public Car gerCar() {
return car;
}

public int getDistance() {
return distance;
}
}