首頁 >Java >java教程 >為什麼在 Java 的 Random 類別中設定種子會傳回相同的數字?

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-06 14:21:031020瀏覽

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() 時將獲得不同的隨機數程式的一部分,同時仍然尊重指定的種子值。

以上是為什麼在 Java 的 Random 類別中設定種子會傳回相同的數字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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