0

範囲内で乱数を 1 つ生成する必要がありますが、特定の 1 つの数字を除外します。
私はこれをそのようにできると思ったが、うまくいかなかった。

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、アラートを次のように変更するだけです。

alert(randNumber)

このフィドルのようにhttp://jsfiddle.net/3urFC/

于 2013-09-28T20:15:53.187 に答える
0

生成した randNum を警告しようとしていますか? 現時点では、関数の引数 (この場合は数値 4) を毎回警告します。alert(randNumber) に変更したいと思います。

于 2013-09-28T20:16:16.937 に答える
0

Math.random0 から 1 の間の数値を返します。 MDN のドキュメントを参照してください。

また、特定の範囲での乱数の生成に関するこの質問も参照してください

したがって、2 つの問題があります。1 つは、自分が考えている範囲で乱数を生成していないこと、2 つは、生成した乱数を使用していないことです。

あなたが説明したものと似たようなことをするこのフィドルを作りました

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ではないその範囲内のランダムな整数を取得します。

于 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
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 に答える