1

100 から 400 の範囲で、この間隔で数値を生成するにはどうすればよいでしょうか。それらの差は 20 未満ではありませんか?

したがって、これらの数値の配列は、たとえば [120, 155, 187, ...] のようになります。

ランダムな間隔から数値を生成するための私の関数は次のとおりです。

function randomFromInterval(from,to){
    return Math.floor(Math.random()*(to-from+1)+from);
}

何か案は?

これが私が試したことですが、それはばかげています:)

function generateNumbers(){

        var nr1 = randomFromInterval(100, xw-100);
        var nr1y = randomFromInterval(100, xw-100);

        var nr2 = randomFromInterval(100, xw-100);
        while (Math.abs(nr1 - nr2) < 20){
            nr2 = randomFromInterval(100, xw-100);
        }
        var nr2y = randomFromInterval(100, xw-100);

        var nr3 = randomFromInterval(100, xw-100);
        while (Math.abs(nr1 - nr3) < 20 && Math.abs(nr2 - nr3) < 20){
            nr3 = randomFromInterval(100, xw-100);
        }
        var nr3y = randomFromInterval(100, xw-100);

        var nr4 = randomFromInterval(100, xw-100);
        while (Math.abs(nr1 - nr4) < 20 && Math.abs(nr2 - nr4) < 20 && Math.abs(nr3 - nr4) < 20){
            nr4 = randomFromInterval(100, xw-100);
        }
        var nr4y = randomFromInterval(100, xw-100);

        var nr5 = randomFromInterval(100, xw-100);
        while (Math.abs(nr1 - nr5) < 20 && Math.abs(nr2 - nr5) < 20 && Math.abs(nr3 - nr5) < 20 && Math.abs(nr4 - nr5) < 20){
            nr5 = randomFromInterval(100, xw-100);
        }
        var nr5y = randomFromInterval(100, xw-100);

        var nrArray = [[nr1,nr1y],[nr2,nr2y],[nr3,nr3y],[nr4,nr4y],[nr5,nr5y]];
        console.log(nrArray);

        return nrArray;
    }
4

3 に答える 3

1

完全に別々の数を生成しようとするのではなく、基準が満たされるまで n 個の乱数を生成してみませんか? 設定した基準を満たさないものは破棄します。生成した有効なランダムの実行中のリストを保持し、それに対してチェックできます。

実装のアイデアについては、https://stackoverflow.com/a/14568023/151234をご覧ください。

于 2013-08-13T20:13:23.083 に答える
0
function rand( from, to ) {
    return Math.floor(Math.random()*(to-from+1)+from);
}

// from:     starting number
// to:       ending number
// inc:      distance between each random number
// amount:   total number of random numbers
function spacedRandArray( from, to, inc, amount ) {
    var retArray = [rand(from,to)]; // sets the first element
    var temp = null;

    for ( var x = 0; x < amount-1; x++ ) {
        do {
            temp = rand( from, to );
        } while ( Math.abs( temp - retArray[x] ) <= inc );

        retArray.push( temp );
    }

    return retArray;
}

実際: http://jsfiddle.net/3n1gm4/qrWyR/

于 2013-08-13T20:20:28.963 に答える