-
Notifications
You must be signed in to change notification settings - Fork 0
Java-Module-Project-YP-2nd-try #1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1 +1,9 @@ | ||
| # Пустой репозиторий для работы с Java кодом в Android Studio | ||
| # Итак, нам предстоит определить лидера гонки: | ||
| # Запрашиваем у пользователя 3 автомобиля, каждый из которых имеет два параметра: название и скорость. | ||
| # После ввода данных пользователем проверяем, что введённая скорость >0 и <=250. Если скорость ввели неверно, программа должна запросить эти данные заново. | ||
| # После успешного ввода рассчитываем, сколько километров за 24 часа смог проехать каждый участник гонки (автомобиль), и запоминаем лидера. | ||
| # Выводим название автомобиля-лидера в консоль в любом понятном формате. Например: Самая быстрая машина: Москвич. | ||
| # Обратите внимание, что в задании нужно использовать разные классы. Предлагаем разделить весь код на три класса: | ||
| # Автомобиль — объект, содержащий в себе параметры «название» и «скорость». | ||
| # Гонка – класс, в котором рассчитывается и запоминается лидер. | ||
| # Main – класс, в котором происходит считывание пользовательского ввода и коммуникация с остальными классами. |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,26 @@ | ||
| public class Car { | ||
| /// Локальные переменные для хранения заданных в конструкторе значений. | ||
| private String _name; // Название машинки. | ||
| private int _speed; //Скорость машинки. | ||
|
|
||
| /// Конструктор, принимает на вход значения: имя машинки, и ее скорость. | ||
| 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; | ||
| } | ||
| } | ||
| 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 машинки могламно условию. | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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(); | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Если тут будет введено не целочисленное значение, то тут будет выброшен эксепшн, который не обрабатывается и приводит к закрытию приложения |
||
| scanner.nextLine(); //Странно что в JAVA nextInt() не очищает буффер ввода!!!!!! | ||
|
|
||
| if (speed >0 && speed <=250){ | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe 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() + " км."); | ||
| } | ||
| } | ||
| } | ||
| } | ||
| 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; //Возвращаем список лидеров. | ||
| } | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Поля лучше пометить
final, тем самым исключив возможность их модификации извне. Тогда можно будет убрать нижнее подчеркивание из нейминга и получать прямой доступ к полям - будет меньше кода, но также безопасно и надёжно