2013-10-11 44 views
3

我是相當新的scala所以這可能是一個愚蠢的問題。我知道你什麼時候使用nextInt(seed)它使用種子,但是當你創建對象時,種子是什麼?例如,在這行代碼:Scala隨機種子在創建隨機對象時做了什麼

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

這似乎對數字的結果沒有影響,當你去使用rnd.nextInt(100)或相似。

回答

9

當呼叫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)。

+2

我還會提到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)。這些頁面還包含種子和一些相關信息的解釋。 –