Math.round(Math.random)返回3个唯一数字问题

时间:2011-03-31 22:26:00

标签: javascript random

好的,所以我需要返回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);
    });
});

5 个答案:

答案 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作为数字,因为只指定了最高范围但它应该满足您的需要:)