Random()。nextInt()不是从零开始的编号?

时间:2019-01-26 01:32:20

标签: java kotlin

import java.util.*

我正在尝试从数组中生成一个随机字符串:

val days = arrayOf("Tuesday", "Thursday", "Saturday")
val chosenDay = days[Random().nextInt(2)]

但是days[Random().nextInt(2)]似乎只在星期二和星期四返回。我在任何地方都找不到答案,但是为什么nextInt()不使用从零开始的编号?

我将其更改为days[Random().nextInt(3)],现在可以正常使用了。

2 个答案:

答案 0 :(得分:5)

这与从零开始或从零开始的索引无关(如果这样的话,您只会得到"Thursday""Saturday"),但是nextInt具有排他性上限。也就是说,nextInt(3)返回的数字小于3。

事实上,这是一个与零索引兼容的约定,因为这意味着您可以使用数组的长度作为上限来获取数组的随机元素。

答案 1 :(得分:0)

正如Kotlin所特有的那样,对于典型的用例,有很多扩展功能。像这里一样,getting a random element来自数组或集合。

在您的情况下,最简单的代码是:

val chosenDay = days.random()

或者,如果您需要对随机性进行更多控制:

val chosenDay = days.random(Random(12345))   // for testing

Random.nextInt(n)生成从零开始的随机数的原因是,它可以方便地用于这样的表达式中:

val chosenDay = days[Random().nextInt(days.size)]