Java 隨機數產生器:為什麼設定種子後輸出總是相同?
在 Java 中,使用 Random 類別產生隨機數時,設定種子始終產生相同輸出的情況並不罕見。讓我們深入研究這個問題並探索有效的解決方案。
考慮以下程式碼片段:
public int random(int i){ Random randnum = new Random(); randnum.setSeed(123456789); return randnum.nextInt(i); }
當從另一個類別多次呼叫時,此方法理想情況下應該提供不同的隨機數。然而,它始終會傳回相同的結果,例如使用numbers.random(10)呼叫時傳回「5」。
此行為背後的罪魁禍首在於在 random 方法中建立了一個新的 Random 實例。每個新實例都使用不同的種子產生器,產生可預測的數字序列。為了修正這個問題,Random 實例需要在整個類別中共用。
public class Numbers { Random randnum; public Numbers() { randnum = new Random(); randnum.setSeed(123456789); } public int random(int i){ return randnum.nextInt(i); } }
現在,使用共享的 Random 實例,多次呼叫 random 方法將產生真正的隨機數,即使有一組種子。種子作為隨機數產生器的起點,確保多次運行的一致性,同時仍保持預期的隨機性元素。
以上是為什麼當我設定種子時,我的 Java 隨機數產生器總是產生相同的輸出?的詳細內容。更多資訊請關注PHP中文網其他相關文章!