0

配列に 200 を超える要素を追加したいと考えています。その配列から、その要素にアクセスしたい:3つの答えがあります。これらの 3 つの回答には配列の要素が必要ですが、2 つの回答に同じ要素は必要ありません。

    var random: Number;
var answ: Array = [var1, var2, var3];
    var elements : Array = [1,2,3,4,5,6,7,8,9,...];
GAME.answer1.addEventListener(MouseEvent.CLICK, randomNumberEvent);
    GAME.answer2.addEventListener(MouseEvent.CLICK, randomNumberEvent);
    GAME.answer3.addEventListener(MouseEvent.CLICK, randomNumberEvent);
answer1.text = elements[random];
answer2.text = elements[random];
answer3.text = elements[random];
function displayRandomNumber()
{
randomGen = randBetween(2, 120);
GAME.randomNumberText.text = randomGen.toString();
if(myArray.indexOf(randomGen) == -1){
myArray.push(randomGen);
cookie.data.storedmyArray=myArray;
cookie.flush();
levelu = randomGen;
}else{
displayRandomNumber()
    }
}

要素にランダムにアクセスして回答に割り当てる最良の方法は何ですか?

4

1 に答える 1

0

配列の長さを使用して、適切な範囲でランダム インデックスを生成します。

answer1.text = elements[int(Math.random() * elements.length)];

重複エントリーを避けたい場合:

package
{
    import flash.display.Sprite;

    public class TestAnswer extends Sprite
    {
        public function TestAnswer()
        {
            super();

            var answers : Array = ["A","B","C","D","E","F","G","H","I","J","K"];

            for(var i : uint = 0; i < 10; ++i)
                trace(getAnswers(3, answers));
        }

        public function getAnswers(num : uint, from : Array) : Array
        {
            if(num > from.length)
                throw new Error("Not enought answers provided");

            var result : Array = [];

            // Clone Array
            var newArray : Array = from.concat();

            // Extract random answers
            while(result.length != num)
                result = result.concat( newArray.splice( int( newArray.length * Math.random() ), 1 ));

            return result;
        }
    }
}

出力例:

A,C,D
A,G,J
F,E,J
I,A,C
H,K,C
I,H,K
D,F,A
I,G,A
A,H,J
D,I,H
于 2013-10-03T12:59:26.143 に答える