理解並修復了編程中的重複隨機數
>>常見的編程問題涉及反复輸出相同數字的隨機數發生器(RNG)。 當RNG在循環中多次重新定位時,通常會發生這種情況。
Random
讓我們以一個示例來檢查這個問題:
在每個循環迭代期間,調試可能會顯示不同的值。但是,在循環之後設置一個斷點,揭示了
public static int RandomNumber(int min, int max) { Random random = new Random(); // Problem: New instance each time return random.Next(min, max); } byte[] mac = new byte[6]; for (int x = 0; x < 6; x++) { mac[x] = (byte)RandomNumber(0, 255); }
解決方案:一個隨機實例mac
根本原因是在循環中創建一個新的對象。 由於經常使用系統時鐘進行播種,因此在快速演替中創建多個實例會導致種子值相同,因此重複數字。
解決方案很簡單:在整個代碼中使用一個單一的靜態實例:
Random
Random
多線程安全
>
在多線程應用程序中,訪問共享的實例需要同步以防止比賽條件。 可以使用鎖來實現:Random
以上是為什麼我的隨機數發生器反復產生相同的數字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!