在 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,这意味着她得负责记舰长日志。 她很喜欢游戏中富有创造力的部分,但不喜欢临场随机编造数据。
帮帮玛丽,为舰长日志里常见的数据写一些随机生成器吧。
本练习的起始实现接收一个java.util.Random实例作为构造参数。
这样,练习的测试就能传入一个带预定义种子的实例,从而让测试结果可预测。
因此,你应当在实现中使用提供的java.util.Random实例。
Starship Enterprise 在航行中会遇到许多星球。
在 Star Trek 宇宙中,星球会按各自的性质划分成不同类别。
比如,地球是一颗M级星球。
所有可能的星球等级有:D、H、J、K、L、M、N、R、T和Y。
实现randomPlanetClass()方法。
它应该随机返回其中一个星球等级。
captainsLog.randomPlanetClass();
// => "K"
Enterprise(注册号NCC-1701)并不是唯一一艘在宇宙中飞行的星舰!
当它和另一艘星舰会合时,玛丽需要记下那艘星舰的注册号。
注册号以 "NCC-" 开头,后面是一个从1000到9999(含两端)的数字。
实现randomShipRegistryNumber()方法,它返回一个随机的星舰注册号。
captainsLog.randomShipRegistryNumber();
// => "NCC-1947"
日志里要是不写日期,那还有什么用呢?
星历是一个浮点数。
Starship Enterprise 在 The Next Generation 第一季里的冒险,发生在星历41000.0和42000.0之间。
其中的 "4" 代表 24 世纪,"1" 代表第一季。
实现randomStardate()方法,返回一个介于41000.0(含)和42000.0(不含)之间的浮点数。
captainsLog.randomStardate();
// => 41458.15721310934