JAVA不降低取值密度和取值概率的指定范圍內(nèi)double隨機(jī)數(shù)和int隨機(jī)數(shù)生成
前言:
因?yàn)橥话l(fā)奇想要生成一批學(xué)生考試成績的測(cè)試數(shù)據(jù),所以就考慮到隨機(jī)數(shù)的生成,但是發(fā)現(xiàn)java各種庫(Math、Random、ThreadLocalRandom)自帶的隨機(jī)數(shù)生成,取值都是[x,y),于是為了搞出double形式的[x,y]取值范圍內(nèi)隨機(jī)數(shù),誕生了這一篇專欄。
(關(guān)于為什么這些庫的隨機(jī)數(shù)生成,取值范圍都是[x, y),大家自行去研究,這里不作展開)
縱覽CSDN、博客園、stackflow,我閱讀了應(yīng)該不下幾十篇文章/問答,對(duì)于整型,也就是int類型、long類型的指定范圍內(nèi)隨機(jī)數(shù)生成,大家都是信手拈來。
但是一旦到達(dá)double,這種還有小數(shù)部分的數(shù)字,就出現(xiàn)了各種欠缺。
像是使用取余數(shù)之類的手段,我始終覺得會(huì)如同一位外國友人所言——將會(huì)降低取值的密度。至于其他的一些手段,我也有試著驗(yàn)證過,有的是會(huì)使得取值的概率不一,有的甚至并不能取到閉區(qū)間的上限值。
總而言之,似乎在double類型的情況下,指定范圍內(nèi)取隨機(jī)數(shù),我并未找到一個(gè)很好的思路。
于是,我只能先提供出當(dāng)下覺得相對(duì)而言比較認(rèn)可的寫法,希望可以拋磚引玉,得到更好的思路。

一、獲取指定范圍內(nèi)的int隨機(jī)數(shù)
注意:ThreadLocalRandom得JDK1.7后才支持

二、獲取指定范圍內(nèi)的double隨機(jī)數(shù)

N、補(bǔ)充
1、本文使用代碼基于我寫的存放于github的公開代碼(倉庫地址:https://github.com/17lhf/happyTest/blob/master/src/main/java/com/basic/happytest/modules/randomUtils/GenNumber.java),歡迎前去查看是否有遺漏或者bug或者復(fù)制下來檢驗(yàn)
2、如果你想順便看看關(guān)于線程與變量搭在一起時(shí)的奇妙反應(yīng),則不妨也去閱讀以下我的另一篇文章:java線程執(zhí)行過程中改變量值的結(jié)果引起的思考
3、如果你正無聊,不妨點(diǎn)擊右邊的“目錄”,瀏覽我所描述的更多奇奇怪怪的筆記文章。

如果你覺得本文對(duì)你有所收獲,請(qǐng)點(diǎn)贊、投幣、收藏、轉(zhuǎn)發(fā),讓更多人看到這篇文章,謝謝!??!
如果你覺得有哪里不對(duì),也歡迎在評(píng)論區(qū)留言指教!??!