學習軌道
/
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,透過 26 個概念158 個練習 和真人引導來學習並精通 Java,全部免費。