轨道
/
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,全部免费。