java中产生随机数的代码是Math.random(),Api写着这样产生的随机数是【0,1)。
要产生一个[a,b]之间的整数的方法是(int)(a+Math.random()*(b-a+1))这个公式是怎么来的?
简单的移位计算。
比如[10,15]
区间值:15-10=5
Math.random() * 5 结果是 [0,5) 之间的数
不满足<=5,所以要 +1 ,即 Math.random() * (5+1) => [0,6)
取整的结果就是【0,5】了
再点上起点10 ,不就是是 [10,15]之间的数了么
我是想知道这个公式是怎么来的,是自己写代码总结出来,还是在Api的某个地方有的看
把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]这样的前后都是闭区间的整数
我是想知道这个公式是怎么来的,是自己写代码总结出来,还是在Api的某个地方有的看
@ccccc三: 这么简单的东西也算公式么,算是总结出来的吧,主要是方便给别人理解,用a和b代表两个值,就像求平均数一样(a+b)/2,这是常识的东西,Math.random()才是api提供的
@小光: 哦,不好意思啊,新手就是那么多问题,老哥能说一下怎么才能高效查阅Api的经验吗?看得懂文档,但写的时候有点懵,就想像刚刚提供的Math.random()一样,就知道写上去就是随机获得0到1直接的数据,但要获取其他范围值的就不知道怎么写了
@ccccc三: 这种就是经验了,api是固定的,你见过一次用法就多会一个,就像Math.random()一样,[0,1),一般人也想不到[0,10)就是Math.random()*10,但是你见过一次这样写的并且理解了你就会了,另外看api的时候别单纯的记,多发散一下思路,看点源码也有一定的用处