0

我需要在一个范围之间生成一个随机数,但排除一个特定数字。
我以为我可以那样做,但它没有用。

function randNum(num){
    var randNumber=Math.floor(Math.random()*num)+1;
    if(randNumber==2){
        randNum(num);
    }else{
        alert(num);
    }
}
randNum(4);

问题是什么?
谢谢。

4

5 回答 5

2

假设您要输出随机数而不是num-parameter,您只需将警报更改为:

alert(randNumber)

就像在这个小提琴http://jsfiddle.net/3urFC/

于 2013-09-28T20:15:53.187 回答
0

Math.random返回一个介于 0 和 1 之间的数字。请参阅MDN 上的文档

另外,请参阅有关在特定范围内生成随机数的问题

所以,你有两个问题:第一,你没有在你认为的范围内生成一个随机数,第二,你没有使用你生成的随机数。

做了这个小提琴,它做的事情类似于你描述的。

function getRandomInt (min, max) {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

function generateRandomWithExclusion(exclude, min, max) {
    var num = getRandomInt(min, max);

    while (num === exclude) {
        num = geRandomInt(min, max);   
    }

    return num;
}

generateRandomWithExclusion(2, 0, 10) // returns an integer between 0 and 10 that is not 2

您传递要排除的数字和 and 的范围,minmax在该范围内获得一个随机整数,该整数不是您要排除的数字。

于 2013-09-28T20:19:46.123 回答
0

正如其他人所说,有一个台风。

我也会以这种方式重新排列它:

function randNum(num){
    var numberToExclude=2;
    var randNumber=Math.floor(Math.random()*(num-1))+1;

    if(randNumber>=numberToExclude) {
        randNumber+=1;
    }

    alert(randNumber);
}
randNum(4);

这是一个 JSFidle

http://jsfiddle.net/2F5Md/1/

于 2013-09-28T20:21:45.003 回答
0

您是否尝试提醒您生成的 randNum?现在,您将每次都提醒函数参数(在本例中为数字 4)。我认为您想将其更改为警报(randNumber)。

于 2013-09-28T20:16:16.937 回答
0
function randNum(num) {
    var randNumber;
    do { randNumber = Math.floor(Math.random()*num)+1; } while(randNumber==2);
    return randNumber;
}
randNum(4);
于 2013-09-28T21:00:06.867 回答