6 回答

TA貢獻2039條經驗 獲得超8個贊
請注意,這種方法比nextInt
方法更有偏見且效率更低,https://stackoverflow.com/a/738651/360211
實現這一目標的一個標準模式是:
Min + (int)(Math.random() * ((Max - Min) + 1))
該爪哇數學庫函數的Math.random()生成的范圍內的雙值[0,1)
。請注意,此范圍不包括1。
為了首先獲得特定范圍的值,您需要乘以您想要覆蓋的值范圍的大小。
Math.random() * ( Max - Min )
這將返回范圍中的值[0,Max-Min)
,其中不包括“Max-Min”。
例如,如果需要[5,10)
,您需要覆蓋五個整數值,以便使用
Math.random() * 5
這將返回范圍中的值[0,5)
,其中不包括5。
現在,您需要將此范圍更改為您要定位的范圍。您可以通過添加Min值來完成此操作。
Min + (Math.random() * (Max - Min))
您現在將獲得該范圍內的值[Min,Max)
。按照我們的例子,這意味著[5,10)
:
5 + (Math.random() * (10 - 5))
但是,這仍然不包括Max
,你得到雙倍的價值。為了獲得Max
包含的值,您需要在range參數中添加1 (Max - Min)
,然后通過強制轉換為int來截斷小數部分。這是通過以下方式完成
Min + (int)(Math.random() * ((Max - Min) + 1))
你有它。范圍內的隨機整數值[Min,Max]
,或者根據示例[5,10]
:
5 + (int)(Math.random() * ((10 - 5) + 1))

TA貢獻1779條經驗 獲得超6個贊
使用:
Random ran = new Random();
int x = ran.nextInt(6) + 5;
整數x現在是具有可能結果的隨機數5-10。

TA貢獻1842條經驗 獲得超13個贊
ThreadLocalRandom等效于多線程環境的類java.util.Random。在每個線程中本地執行生成隨機數。因此,通過減少沖突,我們可以獲得更好的表現。
int rand = ThreadLocalRandom.current().nextInt(x,y);
添加回答
舉報