首页 新闻 会员 周边 捐助

Java中的随机数

0
悬赏园豆:15 [待解决问题]

java中产生随机数的代码是Math.random(),Api写着这样产生的随机数是【0,1)。

要产生一个[a,b]之间的整数的方法是(int)(a+Math.random()*(b-a+1))这个公式是怎么来的?

ccccc三的主页 ccccc三 | 初学一级 | 园豆:5
提问于:2019-07-09 21:52
< >
分享
所有回答(2)
0

简单的移位计算。
比如[10,15]
区间值:15-10=5

Math.random() * 5 结果是 [0,5) 之间的数
不满足<=5,所以要 +1 ,即 Math.random() * (5+1) => [0,6)
取整的结果就是【0,5】了

再点上起点10 ,不就是是 [10,15]之间的数了么

pencile | 园豆:845 (小虾三级) | 2019-07-09 23:06

我是想知道这个公式是怎么来的,是自己写代码总结出来,还是在Api的某个地方有的看

支持(0) 反对(0) ccccc三 | 园豆:5 (初学一级) | 2019-07-10 12:17
0

把Math.random()当成 [0,1)

a+Math.random()*(b-a+1) = a+[0,1)*(b-a+1) = a+[0,b-a+1) = [a, b+1) = [a,b]

因为Math.random()是前闭后开,所以右边要加1才能获取的[a,b]这样的前后都是闭区间的整数

小光 | 园豆:1766 (小虾三级) | 2019-07-10 09:35

我是想知道这个公式是怎么来的,是自己写代码总结出来,还是在Api的某个地方有的看

支持(0) 反对(0) ccccc三 | 园豆:5 (初学一级) | 2019-07-10 12:17

@ccccc三: 这么简单的东西也算公式么,算是总结出来的吧,主要是方便给别人理解,用a和b代表两个值,就像求平均数一样(a+b)/2,这是常识的东西,Math.random()才是api提供的

支持(0) 反对(0) 小光 | 园豆:1766 (小虾三级) | 2019-07-10 16:17

@小光: 哦,不好意思啊,新手就是那么多问题,老哥能说一下怎么才能高效查阅Api的经验吗?看得懂文档,但写的时候有点懵,就想像刚刚提供的Math.random()一样,就知道写上去就是随机获得0到1直接的数据,但要获取其他范围值的就不知道怎么写了

支持(0) 反对(0) ccccc三 | 园豆:5 (初学一级) | 2019-07-10 20:23

@ccccc三: 这种就是经验了,api是固定的,你见过一次用法就多会一个,就像Math.random()一样,[0,1),一般人也想不到[0,10)就是Math.random()*10,但是你见过一次这样写的并且理解了你就会了,另外看api的时候别单纯的记,多发散一下思路,看点源码也有一定的用处

支持(0) 反对(0) 小光 | 园豆:1766 (小虾三级) | 2019-07-11 09:20
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册