1. 程式人生 > >隨機產生5個從0到10之間不重複的整數

隨機產生5個從0到10之間不重複的整數

    既然是隨機,就必然會用到Math.random(),它能隨機產生大於等於0,小於等於1的數字。
    我們要的是0到10之間的整數,所以我們將它乘10。(Math.random()*10)
    我們要的是整數,因此,我們需要將它四捨五入為整數,只剩0,1,2,3,4,5,6,7,8,9,10。(Math.round( Math.random()*10 ))
    既然要產生5個這樣的數字,重複性的操作要交給迴圈來做,這裡我們使用for迴圈:
var str='';
var arr=[];
for(i=0;i<5;i++){
    str = Math.round( Math.random()*10
); arr.push(str);//把str新增到陣列arr中 } document.write(arr);
    這樣陣列arr裡面便儲存了產生的5個0到10之間的隨機數,我們執行一下發現裡面可能會有重複的數字。因此接下來我們的重頭戲是去重複數字:
var str='';
var arr=[];
for(i=0;i<5;i++){
    str = Math.round( Math.random()*10 );
    //在將str新增到數組裡面之前,我們先檢查,把數組裡面已有的數字中與將要新增的str相同的數字刪掉,這樣便保證了陣列arr中沒有重數,這裡又要用到for迴圈:
for(j=0;j<arr.length;j++){ if(arr[j]==str){ arr.splice(j,1);//刪除陣列中從索引為j的數字開始的1位數,因為這裡只刪一個數字,所以其實就是把從索引為j的數字給刪除了,而這個索引為j的數字正是那個和str相同的數字。 } } arr.push( str); } document.write(arr);
    如此執行一下,我們會發現,顯示出來的數字個數經常不是我們要的5個,因為for(i=0;i<5;i++)次數5是確定的,每出現一次重複的數字,我們將它刪掉之後,總的數字個數便會少1,這就是導致問題的原因,因此我們可以在刪除數字的程式碼之後加上'i--',也就是每刪一個重複數字就讓'for(i=0;i<5;i++)'這個for迴圈的次數增加一次,保證了要的數字個數不會到最後少了。

最終的程式碼:

var str='';
var arr=[];
for(i=0;i<5;i++){
    str = Math.round( Math.random()*10 );
    for(j=0;j<arr.length;j++){
            if(arr[j]==str){
                arr.splice(j,1);
                i--;
            }
        }
    arr.push( str);
}
document.write(arr);