好的,所以我需要返回3个彼此不相等的随机数。然后,当再次运行该功能时,数字也不应该是上一次运行中选择的任何数字。
我编写了一个函数来执行此操作,但我一直将未定义作为返回值之一。
我在这里做错了什么?
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);
});
});
答案 0 :(得分:4)
你的问题在这里:
else {
randomNumber(r1, r2, r3);
}
您需要return
递归调用randomNumber
的结果。
else {
return randomNumber(r1, r2, r3);
}
答案 1 :(得分:3)
您错过了return
:
else {
return randomNumber(r1, r2, r3);
}
答案 2 :(得分:0)
在randomNumber
中,如果生成的数字等于三者中的任何一个,则再次致电randomNumber
。但是你忘了返回结果!
答案 3 :(得分:0)
难道你不想告诉randomnumber函数的“else”部分实际返回randomnumber而不只是回忆它吗?
答案 4 :(得分: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作为数字,因为只指定了最高范围但它应该满足您的需要:)