10

我对scala 还很陌生,所以这可能是一个愚蠢的问题。我知道你什么nextInt(seed)时候使用种子,但是当你创建对象时,种子是做什么用的?例如在这行代码中:

val rnd = new scala.util.Random(1000)

rnd.nextInt(100)当您继续使用或类似时,这似乎对数字的结果没有影响。

4

1 回答 1

21

调用时nextInt(n)n不是种子,是返回的伪随机数的上限(0 到 n)。

创建的实例时Random您传递的数字是种子。它确实对结果有影响:

val r1 = new scala.util.Random(1)
r1.nextInt(1000)  // -> 985
val r2 = new scala.util.Random(2)
r2.nextInt(1000)  // -> 108 - different seed than `r1`
val r3 = new scala.util.Random(1)
r3.nextInt(1000)  // -> 985 - because seeded just as `r1`

种子永远不会在返回的数字中直接观察到(除了它们遵循不同的序列),因为 a) 它在内部被进一步加扰,b) 生成的数字在种子上使用多个按位运算的组合。

通常,您将使用任意固定数字作为种子,以保证生成的序列是可重现的,或者您使用另一个伪随机数,例如当前计算机时钟(System.currentTimeMillis例如)。

于 2013-10-11T10:22:12.003 回答