2011-03-31 34 views
2

好吧,所以我需要返回3個不相等的隨機數。然後再次運行該函數時,這些數字也不應該是前一次運行中選擇的任何數字。Math.round(Math.random)返回3個唯一數字問題

我寫了一個函數來這樣做,但我不斷收到undefined作爲返回值之一。

我在這裏做錯了什麼?

f1 = 0; f2 = 0; f3 = 0; 

function randomNumber(r1, r2, r3) { 
    ranNumb = Math.floor(Math.random()*51); 
    if (ranNumb != r1 && ranNumb != r2 && ranNumb != r3) { 
     return ranNumb; 
    } 
    else { 
     randomNumber(r1, r2, r3); 
    } 
} 

$(document).ready(function() { 
    $("#left_btn, #right_btn").click(function() { 
     f1 = randomNumber(f1, f2, f3); 
     f2 = randomNumber(f1, f2, f3); 
     f3 = randomNumber(f1, f2, f3); 
     alert(f1+" "+f2+" "+f3); 
    }); 
}); 

回答

4

你的問題是在這裏:

else { 
    randomNumber(r1, r2, r3); 
} 

您需要return遞歸調用randomNumber的結果。

else { 
    return randomNumber(r1, r2, r3); 
} 
+0

OHHHH,hahaha。我看到我在那裏做了什麼。謝謝! – 2011-03-31 22:30:12

3

你錯過了return

else { 
    return randomNumber(r1, r2, r3); 
} 
0

randomNumber,如果生成的個數等於任何三個,那麼你再打電話randomNumber。但你忘了返回結果!

0

難道你不想告訴randomnumber函數的「else」部分實際返回randomnumber而不是隻是回想起來嗎?

0

可能更容易使用while循環,這裏是一些代碼,我已經適應:

function generateUniqueNumbers(num_of_nums, maxrange) { 
    //initialise an array 
    var arr = []; 
    //generate x unique numbers into an array 
    while(arr.length < num_of_nums){ 
     //generate random number 
     var randomnumber = Math.ceil(Math.random() * maxrange) 
     //initialise boolean 
     var found=false; 
     //loop through the array 
     for(var i=0; i<arr.length; i++){ 
      //if the number exists in the array then break from the while loop 
      if(arr[i] == randomnumber){found=true;break;} 
     } 
     //if the number is not found then add it to the array 
     if(!found)arr[arr.length] = randomnumber; 
    } 
    //if all numbers have been collected return array 
    if(arr.length == num_of_nums){return arr;} 
} 

在功能當前狀態時,它有可能返回0爲一個數字,如僅指定的最高範圍但它應該做你需要的:)