欢迎光临散文网 会员登陆 & 注册

JAVA不降低取值密度和取值概率的指定范围内double随机数和int随机数生成

2022-10-22 15:08 作者:寂风也过路  | 我要投稿

前言:

因为突发奇想要生成一批学生考试成绩的测试数据,所以就考虑到随机数的生成,但是发现java各种库(Math、Random、ThreadLocalRandom)自带的随机数生成,取值都是[x,y),于是为了搞出double形式的[x,y]取值范围内随机数,诞生了这一篇专栏。

(关于为什么这些库的随机数生成,取值范围都是[x, y),大家自行去研究,这里不作展开)

纵览CSDN、博客园、stackflow,我阅读了应该不下几十篇文章/问答,对于整型,也就是int类型、long类型的指定范围内随机数生成,大家都是信手拈来。

但是一旦到达double,这种还有小数部分的数字,就出现了各种欠缺。

像是使用取余数之类的手段,我始终觉得会如同一位外国友人所言——将会降低取值的密度。至于其他的一些手段,我也有试着验证过,有的是会使得取值的概率不一,有的甚至并不能取到闭区间的上限值。

总而言之,似乎在double类型的情况下,指定范围内取随机数,我并未找到一个很好的思路。

于是,我只能先提供出当下觉得相对而言比较认可的写法,希望可以抛砖引玉,得到更好的思路。

一、获取指定范围内的int随机数

注意:ThreadLocalRandom得JDK1.7后才支持

二、获取指定范围内的double随机数

N、补充

1、本文使用代码基于我写的存放于github的公开代码(仓库地址:https://github.com/17lhf/happyTest/blob/master/src/main/java/com/basic/happytest/modules/randomUtils/GenNumber.java),欢迎前去查看是否有遗漏或者bug或者复制下来检验

2、如果你想顺便看看关于线程与变量搭在一起时的奇妙反应,则不妨也去阅读以下我的另一篇文章:java线程执行过程中改变量值的结果引起的思考

3、如果你正无聊,不妨点击右边的“目录”,浏览我所描述的更多奇奇怪怪的笔记文章。

如果你觉得本文对你有所收获,请点赞投币收藏转发,让更多人看到这篇文章,谢谢!!!

如果你觉得有哪里不对,也欢迎在评论区留言指教!!!

JAVA不降低取值密度和取值概率的指定范围内double随机数和int随机数生成的评论 (共 条)

分享到微博请遵守国家法律