2013-11-24 34 views
1

我正在開發一個項目,需要從給定的範圍內生成兩個隨機數(他們兩個在同一時間,一個接一個),並檢查它們是否彼此相等 - 如果是,則繼續執行其他代碼;如果它們不是 - 再次生成數字。現在我的問題是,如果我們有一個範圍[0; 10],並且第一個隨機生成的數字結果爲5,那麼第二個數字的概率也是5,與其他數字一樣好?具體來說,如果Math.random()被連續調用兩次,是否有任何「防禦」來產生相同的數字?或者「嘗試」不生成相同的號碼?Java Math.random()它有多隨意?

+1

你可以做一個for循環,並在1-6之間生成60000個隨機數,然後自己看看。它分佈非常均勻。實現細節,我現在不記得,但可能在維基百科上。 (僞隨機) – Mazyod

+0

Math.random相當不錯,但它不是*高級PRNG(我相信這是一個簡單的LCG實現)。 – user2864740

+0

表觀模式與隨機模式一樣。這裏有一些非隨機的例子http://vanillajava.blogspot.co.uk/2011/10/randomly-no-so-random.html –

回答

7

連續兩次在[0,10]範圍內生成相同的數字對任何隨機數生成器都是完全有效的。如果它採取了任何措施來防止它不是隨機的。

在任何調用中,選擇任何單個數字的機會應該是1:11,並且每個選擇應該獨立於先前的選擇,因此一對中第二個數字與第一個數字匹配的機會是11中的1。

至於如何隨機Math.random()是,它是僞隨機,這意味着它使用算法來生成一系列以「種子」值開始的均勻分佈的數字。它不適用於密碼學,但非常適合模擬和其他非加密用途。

+0

「..每個選擇應該獨立於以前的選擇..」總結它適合我。 – user2864740

+0

謝謝。只是想確定。 – astralmaster