儘管將 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); } }
在此更新的程式碼中:
透過進行這些更改,您現在在從不同的地方呼叫 random() 時將獲得不同的隨機數程式的一部分,同時仍然尊重指定的種子值。
以上是為什麼在 Java 的 Random 類別中設定種子會傳回相同的數字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!