3
我是相當新的scala所以這可能是一個愚蠢的問題。我知道你什麼時候使用nextInt(seed)
它使用種子,但是當你創建對象時,種子是什麼?例如,在這行代碼:Scala隨機種子在創建隨機對象時做了什麼
val rnd = new scala.util.Random(1000)
這似乎對數字的結果沒有影響,當你去使用rnd.nextInt(100)
或相似。
我是相當新的scala所以這可能是一個愚蠢的問題。我知道你什麼時候使用nextInt(seed)
它使用種子,但是當你創建對象時,種子是什麼?例如,在這行代碼:Scala隨機種子在創建隨機對象時做了什麼
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中的兩種隨機 - [secure](http://docs.oracle.com/javase/7/docs/api/java/security/SecureRandom.html)和[insecure ](http://docs.oracle.com/javase/7/docs/api/java/util/Random.html)。這些頁面還包含種子和一些相關信息的解釋。 –