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

import main.java.Car;
import main.java.Race;

public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
ArrayList<Car> cars = getCars(3);
Race race = new Race(cars);
Car winner = race.getWinner();
System.out.printf("Самая быстрая машина: %s", winner.title);
}

public static ArrayList<Car> getCars(int participantsCount) {
Scanner scanner = new Scanner(System.in);
ArrayList<Car> cars = new ArrayList<>();
for (int i = 1; i <= participantsCount; i++) {
String title = getCarTitle(scanner, i);
int speed = getCarSpeed(scanner, i);
cars.add(new Car(title, speed));
}

return cars;
}

public static String getCarTitle(Scanner scanner, int participantNumber) {
System.out.printf("— Введите название машины №%d:", participantNumber);
return scanner.next();
}

public static int getCarSpeed(Scanner scanner, int participantNumber) {
System.out.printf("— Введите скорость машины №%d:", participantNumber);
if (!scanner.hasNextInt()) {
System.out.println("— Неправильная скорость");
scanner.next();
return getCarSpeed(scanner, participantNumber);
}

int speed = scanner.nextInt();
if (Car.isSpeedValid(speed)) {
return speed;
}
System.out.println("— Неправильная скорость");

return getCarSpeed(scanner, participantNumber);
}
}
15 changes: 15 additions & 0 deletions src/main/java/main/java/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package main.java;

public class Car {
final public String title;
final public int speed;

public Car(String title, int speed) {
this.title = title;
this.speed = speed;
}

public static boolean isSpeedValid(int speed) {
return speed > 0 && speed <= 250;
}
}
28 changes: 28 additions & 0 deletions src/main/java/main/java/Race.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package main.java;

import java.util.ArrayList;

public class Race {
private final ArrayList<Car> cars;
private Car winner;

public Race(ArrayList<Car> cars) {
this.cars = cars;
//тут надо кинуть екцепшен если машин меньше 2-х например, но мы их пока не изучали :-)
}

public Car getWinner() {
if (this.winner != null) {
return this.winner;
}

this.winner = cars.get(0);
for (Car car: cars) {
if (car.speed > winner.speed) {
this.winner = car;
}
}

return this.winner;
}
Comment on lines +14 to +27
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

От хранения массива машин и от этого цикла можно избавиться, запоминая победителя сразу при вводе, тем самым программа будет работать быстрее и требовать меньше памяти для выполнения

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ты имеешь ввиду перенести расчет победителя в конструктор? Не понимаю как избавиться от цикла: заменить на какой-то имеющийся метод сортировки который отсортирует список по одному из полей?

Copy link
Copy Markdown
Owner Author

@struklyts struklyts Nov 14, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В целом конечно все можно написать короче и проще. Вопросы оптимизации конечно же важны в продакшене, при этом для меня сейчас важно пощупать и разобраться с синтаксисом, с подходами которые используются в java, поиспользовать структуры которые мы изучали и тп

}