Scala Random种子在创建随机对象时做什么
我对scala相当陌生,所以这可能是个愚蠢的问题。我知道当您执行Scala Random种子在创建随机对象时做什么,scala,random,random-seed,Scala,Random,Random Seed,我对scala相当陌生,所以这可能是个愚蠢的问题。我知道当您执行nextInt(seed)时,它会使用种子,但是当您创建对象时,种子是用于什么的?例如,在这一行代码中: val rnd = new scala.util.Random(1000) 当您继续使用rnd.nextInt(100)或类似工具时,这似乎对数字的结果没有影响。当调用nextInt(n)时,n不是种子,而是返回的伪随机数的上限(0到n) 创建Random的实例时,传递的数字是种子。它确实会对结果产生影响: val r1 =
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
)。我还将提到java/scala中的两种类型的随机数——和。这些页面还包含种子的解释和一些相关信息。