在javascript中生成数字但排除一个数字

在javascript中生成数字但排除一个数字,javascript,Javascript,我需要在一个范围内生成一个随机数,但不包括一个特定数。 我原以为我可以这样做,但没用 function randNum(num){ var randNumber=Math.floor(Math.random()*num)+1; if(randNumber==2){ randNum(num); }else{ alert(num); } } randNum(4); 有什么问题吗? 谢谢。假设您想输出随机数而不是num-参数,您只需将警

我需要在一个范围内生成一个随机数,但不包括一个特定数。
我原以为我可以这样做,但没用

function randNum(num){
    var randNumber=Math.floor(Math.random()*num)+1;
    if(randNumber==2){
        randNum(num);
    }else{
        alert(num);
    }
}
randNum(4);
有什么问题吗?

谢谢。

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

alert(randNumber)

就像在这把小提琴中一样,您是否试图提醒生成的randNum?现在,每次都会提醒函数参数(在本例中是数字4)。我想您应该将其更改为alert(randNumber)。

数学。random返回一个介于0和1之间的数字。看

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

我认为这和你描述的相似

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

您传递要排除的数字以及
min
max
的范围,并在该范围内获得一个随机整数,该整数不是您要排除的数字。

如其他人所述,存在台风

我也会这样重新安排:

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

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

    alert(randNumber);
}
randNum(4);
这是一本书


您正在将“num”传递给
alert()
而不是“randNumber”…这个问题似乎与主题无关,因为它涉及一个简单的印刷错误。更好的方法是:生成一个从1到3的数字。如果它是
=2
,则添加一个。不需要循环。有点打字错误。。谢谢这不是一个统一的分布。要求证明有点奇怪,但要解释一下,选择3的可能性是大多数其他数字的两倍。试着运行几百次,自己看看。我在问题评论中建议的方法给出了一个无偏分布。我更正了代码。仍然不正确。您需要使用
=
并为
numHere设置一个特殊情况。这是一个正确的实现,它具有很大的灵活性并覆盖所有边缘情况。它还包括一个测试功能,以证明其正确性:
function randNum(num) {
    var randNumber;
    do { randNumber = Math.floor(Math.random()*num)+1; } while(randNumber==2);
    return randNumber;
}
randNum(4);