HI大家好我来填上一次[笔记][JavaScript]用Math.random()取得乱数的技巧留下的坑惹,上一篇最后实做出来的funciton是用来取得1~x间的乱数,这一篇就来提一下要如何做出取得x~y之间的乱数吧!
首先複习一下上一篇最后实做出来的function
function getRandom(x){ return Math.floor(Math.random()*x)+1;};
以上是产生1~x之间的乱数,也就是说x是区间内的最大值,1则是区间内的最小值,我们就可以把这个function改写成以下方式:
//以下function多了一个参数min代替了原本区间内的最小值1,而原本的最大值x则是改成了参数maxfunction getRandom(min,max){ return Math.floor(Math.random()*max)+min;};
上面的function是以上一次的结果去改良的,让乱数乘上最大值去无条件捨去,但是得到的最小值会是0,所以最后我们在加上min,让最小值变成(0+min)
,But!!!!写程式最重要的就是这个But还有那个Bug,因为我们后面加上min的关係,Math.floor(Math.random()*max)
的最大结果max-1也会是加上min,所以他这个函数产生乱数的区间会变成「(0+min)~(max-1+min)」,既然知道最大值Math.random()*max
无条件捨去后他会少了1和多了min,那我们只需要在无条件捨去前先为他加上1和减去min变成Math.random()*(max-min+1)
,接着把他写进function中就能得到我们要的了:
//产生min到max之间的乱数function getRandom(min,max){ return Math.floor(Math.random()*(max-min+1))+min;};//会产生1~5之间的随机乱数getRandom(1,5);//会产生20~500之间的随机乱数getRandom(20,500);//也可以用迴圈测试看看!var arr = [];for(i=1;i<=10;i++){arr.push(getRandom(1,10));};//arr大概会是这个样子//[10, 3, 6, 7, 10, 1, 6, 7, 5, 8]
以上就是用区间条件来产生乱数的function!
参考文章:https://gist.github.com/kerimdzhanov/7529623
如果我有观念错误或解释不清楚的地方,还麻烦各位大大指点了,谢谢大家!