0

2 つの数値の間で乱数を選択するスクリプトを作成しようとしています。しかし、時々同じ番号を選びます。配列が完成するまで同じ番号を繰り返したくありません。

これが私のコードです

$(document).ready(function () {
    abc();
    test = array();

    function abc() {
        res = randomXToY(1, 10, 0);

        $('#img' + res).fadeTo(1200, 1);
        //$(this).addClass('activeImg');
        //});
        setTimeout(function () {
            removeClassImg(res)
        }, 3000);
    }

    function removeClassImg(res) {
        $('#img' + res).fadeTo(1200, 0.1);
        //$('#img' + res).removeClass('activeImg');
        abc();
    }

    function randomXToY(minVal, maxVal, floatVal) {
        var randVal = minVal + (Math.random() * (maxVal - minVal));

        return typeof floatVal == 'undefined' ? Math.round(randVal) : randVal.toFixed(floatVal);

    }
});

誰でもこれについて考えていますか...

4

2 に答える 2

1

すでに生成されている番号のリストを維持し、このリストと照合する必要があります。重複を見つけた場合は、新しい番号を再生成します。

于 2012-05-24T05:58:59.050 に答える
0

乱数を繰り返したくない場合は、何らかの方法で追跡する必要があります。

扱っている範囲が比較的小さい場合は、考えられるすべての結果を含む配列を作成し、その中からランダムに選択することができます。

function Randomizer(minVal, maxVal, floatVal){
    var possible_results = []; // for larger arrays you can build this using a loop of course
    var randomization_array = [];
    var count = minVal;
    var incrementor = floatVal || 1; // set the distance between possible values (if floatVal equals 0 we round to 1)
    while (count <= maxVal) {
        possible_results.push(count);
        count += incrementor;
    }

    this.run = function(){
        // if randomization_array is empty set posssible results into it
        randomization_array = randomization_array.length ? randomization_array : $.merge(randomization_array, possible_results);
        // pick a random element within the array
        var rand = Math.floor(Math.random()*randomization_array.length);
        // return the relevant element
        return randomization_array.splice(rand,1)[0];   
    }
}

そしてそれを使用するために(可能な範囲ごとに特殊なオブジェクトを作成します):

rand = new Randomizer(1,10,0);
rand.run();

このアプローチは、非常に大きな範囲ではうまく機能しないことに注意してください

于 2012-05-24T12:36:22.227 に答える