我对scala还比较新,所以这可能是个愚蠢的问题。我知道当你使用nextInt(seed)
时它会使用种子,但在创建对象时,种子是什么呢?例如,在这行代码中:
val rnd = new scala.util.Random(1000)
当您继续使用rnd.nextInt(100)
或类似方法时,这似乎对数字的结果没有影响。
我对scala还比较新,所以这可能是个愚蠢的问题。我知道当你使用nextInt(seed)
时它会使用种子,但在创建对象时,种子是什么呢?例如,在这行代码中:
val rnd = new scala.util.Random(1000)
当您继续使用rnd.nextInt(100)
或类似方法时,这似乎对数字的结果没有影响。
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
)。