2016-12-28 51 views
3

我下面一本書,並在此代碼:爲什麼我用Random Run獲得相同的數字?

Random rand = new Random(47); 
    int i, j, k; 
    j = rand.nextInt(100) + 1; 
    System.out.println("j : " + j); 
    k = rand.nextInt(100) + 1; 
    System.out.println("k : " + k); 

我在這本書的輸出相同的號碼,那就是:

j : 59 
k : 56 

如果我使用

Random rand = new Random(); 

沒有47隨機類產生隨機數,這是可以的,但爲什麼如果我把數字47加入j = rand.nextInt(100) + 1;爲什麼我得到相同的輸出? 謝謝

+0

構造函數的參數是[random seed](https://en.wikipedia.org/wiki/Random_seed)。有關更多信息,請參閱[此問題](http://stackoverflow.com/questions/1619627/what-does-seeding-mean)。 – Phylogenesis

+1

因爲機器不能隨機。通過提供固定的種子,您可以保證一遍又一遍地產生相同的輸出。在後臺,還需要計算一個隨機數。 – SomeJavaGuy

回答

3

documentation

如果隨機的兩個實例使用相同的種子創建的,方法相同的調用序列的每個製作,他們將生成並返回號碼相同的序列。

您可以在constructor

指定種子創建使用單個long種子一個新的隨機數發生器。

參見:
Pseudorandom number generator - Wikipedia

+0

所以,籽晶是引導,以實現在所述隨機數發生器相同號碼。 –

+0

@Lost_in_the_code我不知道你所說的「引導」的意思,但肯定的,種子是什麼讓你每次都得到相同的號碼。 – Arc676

+0

我用「啓動」是指啓動:) –

1

通常情況下,隨機並非真正隨機的,但僞。這意味着它需要一個給定的種子,並用它來產生一個看起來像隨機的數字序列(但它是可預測的,如果放入相同的種子,它會重複)。

相關問題