Треки
/
Java
Java
/
Вправи
/
Need for Speed
Need for Speed

Need for Speed

Навчальна вправа

Вступ

Конструктори

Створення екземпляра класу відбувається через виклик його конструктора за допомогою оператора new. Конструктор - це особливий різновид методу, мета якого - ініціалізувати щойно створений екземпляр. Конструктори мають такий самий вигляд, як звичайні методи, але без типу повернення і з назвою, що збігається з назвою класу.

class Library {
    private int books;

    public Library() {
        // Initialize the books field
        this.books = 10;
    }
}

// This will call the constructor
var library = new Library();

Як і звичайні методи, конструктори можуть мати параметри. Параметри конструктора зазвичай зберігають як (приватні) поля, щоб звертатися до них пізніше, або ж використовують в якомусь одноразовому обчисленні. Аргументи можна передавати конструкторам так само, як і звичайним методам.

class Building {
    private int numberOfStories;
    private int totalHeight;

    public Building(int numberOfStories, double storyHeight) {
        this.numberOfStories = numberOfStories;
        this.totalHeight = numberOfStories * storyHeight;
    }
}

// Call a constructor with two arguments
var largeBuilding = new Building(55, 6.2);

Вказівки

У цій вправі ми організовуємо гонки між різними типами радіокерованих машинок. Кожна машинка має власну швидкість і власний розряд батареї.

Машинки стартують із повністю зарядженою батареєю (100%). Щоразу, коли ми керуємо машинкою за допомогою пульта дистанційного керування, вона проїжджає відстань, що дорівнює її швидкості в метрах, а відсоток заряду, що залишився, зменшується на величину розряду батареї.

Якщо заряд батареї машинки менший за відсоток її розряду, ми більше не можемо нею керувати.

Кожна траса має власну дистанцію. Машинки перевіряють на те, чи здатні вони подолати трасу, не розрядивши батарею.

На нас чекає шість завдань, і в кожному з них ми працюватимемо з екземплярами радіокерованих машинок.

1. Створення радіокерованої машинки

Щоб мати змогу створювати радіокеровану машинку, визначмо конструктор класу NeedForSpeed, який приймає два параметри: швидкість машинки в метрах і відсоток розряду батареї (обидва типу int):

int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);

2. Створення траси

Щоб мати змогу створювати трасу, визначмо конструктор класу RaceTrack, який приймає єдиний параметр: дистанцію траси в метрах (типу int):

int distance = 800;
var raceTrack = new RaceTrack(distance);

3. Керування машинкою

Реалізуймо метод NeedForSpeed.drive(), який оновлює кількість пройдених метрів відповідно до швидкості машинки. Також реалізуймо метод NeedForSpeed.distanceDriven(), який повертає кількість метрів, пройдених машинкою:

int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
car.drive();

car.distanceDriven();
// => 5

4. Перевірка розрядженої батареї

Оновімо метод NeedForSpeed.drive(), щоб він зменшував заряд батареї відповідно до її розряду. Також реалізуймо метод NeedForSpeed.batteryDrained(), який показує, чи батарея розряджена настільки, що керувати машинкою вже неможливо:

int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);
car.drive();

car.batteryDrained();
// => false

5. Створення радіокерованої машинки Nitro

Найпопулярніша радіокерована машинка - це Nitro, у якої приголомшлива максимальна швидкість 50 метрів і розряд батареї 4%. Реалізуймо (статичний) метод NeedForSpeed.nitro(), який повертає машинку цього типу:

var car = NeedForSpeed.nitro();
car.drive();
car.distanceDriven();
// => 50

6. Перевірка, чи здатна радіокерована машинка завершити гонку

Щоб завершити гонку, машинка має бути здатною проїхати дистанцію гонки. Це означає, що її батарея не повинна розрядитися до того, як вона перетне фінішну лінію. Реалізуймо метод RaceTrack.canFinishRace(), який приймає екземпляр NeedForSpeed як параметр і повертає true, якщо машинка здатна завершити гонку, інакше повертає false:

int speed = 5;
int batteryDrain = 2;
var car = new NeedForSpeed(speed, batteryDrain);

int distance1 = 100;
var race1 = new RaceTrack(distance1);

int distance2 = 300;
var race2 = new RaceTrack(distance2);

race1.canFinishRace(car);
// => true

race2.canFinishRace(car);
// => false
Редагувати через GitHub Посилання відкривається в новому вікні або вкладці
Java Exercism

Час розпочати Need for Speed?

Зареєструйтеся на Exercism, щоб вивчати й опановувати Java, а також 26 концепцій158 вправ та справжнє наставництво від людей, і все це безкоштовно.