學習軌道
/
C#
C#
/
練習
/
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();

和一般方法一樣,建構子也可以有參數。建構子的參數通常會存成(private)欄位,方便之後存取,或是用於一次性的計算。就像傳遞引數給一般方法一樣,你也可以傳遞引數給建構子。

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. 建立遙控車

請為RemoteControlCar類別定義一個建構子,讓它能建立遙控車。這個建構子接受車速(以公尺為單位)和耗電量百分比作為兩個參數(兩者的型別都是int):

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

2. 建立賽道

請為RaceTrack類別定義一個建構子,讓它能建立賽道。這個建構子只接受一個參數:賽道的距離(以公尺為單位,型別為int):

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

3. 駕駛車輛

實作RemoteControlCar.Drive()方法,根據車速更新已行駛的公尺數。另外實作RemoteControlCar.DistanceDriven()方法,回傳車輛已行駛的公尺數:

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();

car.DistanceDriven();
// => 5

4. 檢查電池是否耗盡

更新RemoteControlCar.Drive()方法,根據車輛的耗電量消耗電池。另外實作RemoteControlCar.BatteryDrained()方法,指出電池是否已耗盡:

int speed = 5;
int batteryDrain = 2;
var car = new RemoteControlCar(speed, batteryDrain);
car.Drive();

car.BatteryDrained();
// => false

5. 建立 Nitro 遙控車

最暢銷的遙控車是 Nitro,它擁有驚人的最高時速 50 公尺,耗電量為 4%。實作(靜態)RemoteControlCar.Nitro()方法,回傳這款車:

var car = RemoteControlCar.Nitro();
car.Drive();
car.DistanceDriven();
// => 50

6. 檢查遙控車是否能完成比賽

車輛必須能行駛整條賽道的距離,才算完成比賽。也就是說,它不能在越過終點線之前把電量耗盡。實作RaceTrack.TryFinishTrack()方法,它接受一個RemoteControlCar實例作為參數,如果車輛能完成賽道就回傳true,否則回傳false:

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

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

raceTrack.TryFinishTrack(car);
// => true
透過 GitHub 編輯 連結會在新視窗或分頁中開啟
C# Exercism

準備好開始 Need for Speed 了嗎?

註冊 Exercism,透過 62 個概念178 個練習 和真人引導來學習並精通 C#,全部免費。