」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼在 Java 的 Random 類別中設定種子會傳回相同的數字?

為什麼在 Java 的 Random 類別中設定種子會傳回相同的數字?

發佈於2024-11-09
瀏覽:147

Why Does Setting the Seed in Java's Random Class Return the Same Number?

Java隨機數產生:為什麼設定種子會回傳相同的數字?

儘管將Random類別的種子設定為特定值,但隨機數產生器始終會傳回相同的數字。讓我們探討一下可能導致此問題的原因。

了解 Random 類別和種子初始化

Java Random 類別旨在產生偽隨機數。預設情況下,它使用其內部時鐘作為種子值,使其產生相對可預測的數字序列。若要自訂序列,您可以使用 setSeed() 方法明確設定種子。

種子是用來初始化隨機數產生器的內部狀態的數值。此狀態決定產生數字的順序。

問題:共用隨機實例

在提供的程式碼中,您將在 random() 方法中建立一個新的 Random 實例。這意味著每次呼叫 random() 時,都會設定一個新的種子,從而有效地覆蓋先前設定的種子值。

要解決此問題,您需要在整個類別中共用 Random 實例。透過建立單一實例並在類別初始化時設定一次種子,可以確保一致地產生相同的數字序列。

更新的代碼

以下更新的代碼解決了該問題:

public class Numbers {
    private Random randnum;

    public Numbers() {
        randnum = new Random();
        randnum.setSeed(123456789);
    }

    public int random(int i) {
        return randnum.nextInt(i);
    }
}

在此更新的程式碼中:

  1. 聲明了一個名為 randnum 的私有欄位來表示共用的 Random 實例。
  2. Random 實例已創建,種子為在建構函數中設置,確保種子在創建類別物件時僅初始化一次。

透過進行這些更改,您現在將在呼叫時獲得不同的隨機數來自程式不同部分的 random(),同時仍然尊重指定的種子值。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3