儘管將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(),同時仍然尊重指定的種子值。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3