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
10 changes: 9 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,9 @@
# Пустой репозиторий для работы с Java кодом в Android Studio
# Итак, нам предстоит определить лидера гонки:
# Запрашиваем у пользователя 3 автомобиля, каждый из которых имеет два параметра: название и скорость.
# После ввода данных пользователем проверяем, что введённая скорость >0 и <=250. Если скорость ввели неверно, программа должна запросить эти данные заново.
# После успешного ввода рассчитываем, сколько километров за 24 часа смог проехать каждый участник гонки (автомобиль), и запоминаем лидера.
# Выводим название автомобиля-лидера в консоль в любом понятном формате. Например: Самая быстрая машина: Москвич.
# Обратите внимание, что в задании нужно использовать разные классы. Предлагаем разделить весь код на три класса:
# Автомобиль — объект, содержащий в себе параметры «название» и «скорость».
# Гонка – класс, в котором рассчитывается и запоминается лидер.
# Main – класс, в котором происходит считывание пользовательского ввода и коммуникация с остальными классами.
26 changes: 26 additions & 0 deletions src/main/java/Car.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
public class Car {
/// Локальные переменные для хранения заданных в конструкторе значений.
private String _name; // Название машинки.
private int _speed; //Скорость машинки.
Comment on lines +3 to +4

Choose a reason for hiding this comment

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

Поля лучше пометить final, тем самым исключив возможность их модификации извне. Тогда можно будет убрать нижнее подчеркивание из нейминга и получать прямой доступ к полям - будет меньше кода, но также безопасно и надёжно


/// Конструктор, принимает на вход значения: имя машинки, и ее скорость.
public Car(String name, int speed) {
_name = name;
_speed = speed;
}

/// Метод доступа к названию машинки.
public String getName() {
return _name;
}

/// Метод доступа к скорости машинки.
public int getSpeed() {
return _speed;
}

/// Вычисляет расстояние пройденное машинкой за 24 чсас.
public int getDistanceIn24Hours() {
return getSpeed() * 24;
}
}
37 changes: 36 additions & 1 deletion src/main/java/Main.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,41 @@
import java.util.ArrayList;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
System.out.println("Hello world!");
Scanner scanner = new Scanner(System.in); // Скнер для ввода данных.
Car[] cars = new Car[3]; // Массив размерностью в 3 машинки могламно условию.

Choose a reason for hiding this comment

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

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


for (int i = 0; i < cars.length; i++){
System.out.println("Введите название автомобиля № " + (i + 1) + ":");
String name = scanner.nextLine();

int speed;
while (true) {
System.out.println("Введите его скорость (1–250):");
speed = scanner.nextInt();

Choose a reason for hiding this comment

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

Если тут будет введено не целочисленное значение, то тут будет выброшен эксепшн, который не обрабатывается и приводит к закрытию приложения

scanner.nextLine(); //Странно что в JAVA nextInt() не очищает буффер ввода!!!!!!

if (speed >0 && speed <=250){

Choose a reason for hiding this comment

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

Минимальную и максимальную скорости лучше вынести в константы для повышения читабельности кода

break;
}
else {
System.out.println("Задана неверная скорость. Скорость должна быть в диапазоне от 1 до 250 км/ч. Попробуйте снова.");
}
}
cars[i] = new Car(name, speed);
}

Race race = new Race();
ArrayList<Car> leaders = race.getRaceLeaders(cars);
if (leaders.size() == 1){
System.out.println("Лидер гонки \"24 часа Ле-Ман\": " + leaders.getFirst().getName() + ", он проехал - " + leaders.getFirst().getDistanceIn24Hours() + " км.");
}
else {
System.out.println("Лидеры гонки \"24 часа Ле-Ман\": ");
for (Car leader: leaders){
System.out.println("* " + leader.getName() + ", он проехал - " + leader.getDistanceIn24Hours() + " км.");
}
}
}
}
23 changes: 23 additions & 0 deletions src/main/java/Race.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import java.util.ArrayList;
public class Race {
/// Сптско лидеров, на тот случай если больше одной машинки имеет максимальный, одинаковый пробег.
private ArrayList<Car> _leaders = new ArrayList<>();

/// Метод вычисляет лидера или лидеров, и возвращает список лидирующих машинок.
public ArrayList<Car> getRaceLeaders(Car[] cars){
int maxDistance = 0; // Первоначальная инициализация максимальной дистанции.
for (Car car: cars){
int distance = car.getDistanceIn24Hours(); // Вычисление пройденной дистанции.

if(distance > maxDistance){ //Если машинка лидер:
maxDistance = distance;
_leaders.clear(); // Очищаем список лидеров,
_leaders.add(car); //Добавляем машинку в лидеры.
}
else if (distance == maxDistance){ //Если машинка второй лидер:
_leaders.add(car); //Добавляем машинку в лидеры.
}
}
return _leaders; //Возвращаем список лидеров.
}
}