iT邦幫忙

1

[筆記][JavaScript]用Math.random()取得某區間內的隨機亂數

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則是改成了參數max
function 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

如果我有觀念錯誤或解釋不清楚的地方,還麻煩各位大大指點了,謝謝大家!


尚未有邦友留言

立即登入留言