轨道
/
Java
Java
/
练习
/
船长日志
船长日志

船长日志

学习练习

简介

随机性

在 Java 中,可以使用java.util.Random类的实例来生成随机数。

随机整数

可以使用nextInt()方法生成一个随机整数。 它生成的值介于Integer.MIN_VALUE和Integer.MAX_VALUE之间。

Random random = new Random();

random.nextInt();
// => -1169335537

要限制生成值的范围,可以使用nextInt(int)。 它生成的值从0(包含)到给定的上界(不包含)。

例如,下面这行代码会生成一个从0到9的随机数。

Random random = new Random();

random.nextInt(10);
// => 6

而下面这行代码会生成一个从10到19的随机数。

Random random = new Random();

10 + random.nextInt(10);
// => 11

随机双精度浮点数

可以使用nextDouble()方法生成一个随机的双精度浮点数。 它生成的值介于0.0和1.0之间。

Random random = new Random();

random.nextDouble();
// => 0.19250004204021398

而下面这行代码会生成一个从100.0到200.0的随机数。

Random random = new Random();

100.0 + 100.0 * random.nextDouble();
// => 111.31849856260328

说明

玛丽是电视剧 Star Trek: The Next Generation 的忠实粉丝。 她经常玩纸上角色扮演游戏,在游戏里她和朋友们假扮 Starship Enterprise 的船员。 玛丽扮演的角色是 Captain Picard,这意味着她得负责记舰长日志。 她很喜欢游戏中富有创造力的部分,但不喜欢临场随机编造数据。

帮帮玛丽,为舰长日志里常见的数据写一些随机生成器吧。

Note

本练习的起始实现接收一个java.util.Random实例作为构造参数。 这样,练习的测试就能传入一个带预定义种子的实例,从而让测试结果可预测。

因此,你应当在实现中使用提供的java.util.Random实例。

1. 生成随机星球

Starship Enterprise 在航行中会遇到许多星球。 在 Star Trek 宇宙中,星球会按各自的性质划分成不同类别。 比如,地球是一颗M级星球。 所有可能的星球等级有:D、H、J、K、L、M、N、R、T和Y。

实现randomPlanetClass()方法。 它应该随机返回其中一个星球等级。

captainsLog.randomPlanetClass();
// => "K"

2. 生成随机星舰注册号

Enterprise(注册号NCC-1701)并不是唯一一艘在宇宙中飞行的星舰! 当它和另一艘星舰会合时,玛丽需要记下那艘星舰的注册号。

注册号以 "NCC-" 开头,后面是一个从1000到9999(含两端)的数字。

实现randomShipRegistryNumber()方法,它返回一个随机的星舰注册号。

captainsLog.randomShipRegistryNumber();
// => "NCC-1947"

3. 生成随机星历

日志里要是不写日期,那还有什么用呢?

星历是一个浮点数。 Starship Enterprise 在 The Next Generation 第一季里的冒险,发生在星历41000.0和42000.0之间。 其中的 "4" 代表 24 世纪,"1" 代表第一季。

实现randomStardate()方法,返回一个介于41000.0(含)和42000.0(不含)之间的浮点数。

captainsLog.randomStardate();
// => 41458.15721310934
通过 GitHub 编辑 链接将在新窗口或新标签页中打开
Java Exercism

准备好开始 船长日志 了吗?

注册 Exercism,借助 26 个概念158 个练习 和真人导师指导,学习并掌握 Java,全部免费。