亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在Java中生成特定范圍內的隨機整數?

如何在Java中生成特定范圍內的隨機整數?

長風秋雁 2019-05-21 14:57:58
如何int在特定范圍內生成隨機值?我試過以下,但那些不起作用:嘗試1:randomNum = minimum + (int)(Math.random() * maximum);// Bug: `randomNum` can be bigger than `maximum`.嘗試2:Random rn = new Random();int n = maximum - minimum + 1;int i = rn.nextInt() % n;randomNum =  minimum + i;// Bug: `randomNum` can be smaller than `minimum`.如何在Java中生成特定范圍內的隨機整數?
查看完整描述

6 回答

?
largeQ

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))


查看完整回答
反對 回復 2019-05-21
?
哆啦的時光機

TA貢獻1779條經驗 獲得超6個贊

使用:


Random ran = new Random();

int x = ran.nextInt(6) + 5;

整數x現在是具有可能結果的隨機數5-10。


查看完整回答
反對 回復 2019-05-21
?
慕萊塢森

TA貢獻1810條經驗 獲得超4個贊

使用:

minimum + rn.nextInt(maxValue - minvalue + 1)


查看完整回答
反對 回復 2019-05-21
?
紅顏莎娜

TA貢獻1842條經驗 獲得超13個贊

ThreadLocalRandom等效于多線程環境的類java.util.Random。在每個線程中本地執行生成隨機數。因此,通過減少沖突,我們可以獲得更好的表現。


int rand = ThreadLocalRandom.current().nextInt(x,y);


查看完整回答
反對 回復 2019-05-21
  • 6 回答
  • 0 關注
  • 3193 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號