首頁  >  文章  >  Java  >  為什麼當我設定種子時,我的 Java 隨機數產生器總是產生相同的輸出?

為什麼當我設定種子時,我的 Java 隨機數產生器總是產生相同的輸出?

Barbara Streisand
Barbara Streisand原創
2024-11-07 11:58:02796瀏覽

Why Does My Java Random Number Generator Always Produce the Same Output When I Set a Seed?

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn