生成10个随机数,没有重复

时间:2014-12-16 20:55:34

标签: actionscript-3

我已经使这个生成10个随机数,没有重复,但它不能正常工作。有时它会产生重复,但我不知道为什么。有人可以告诉我代码有什么问题吗,它有什么与indexOf有关吗?

var minArray:Array = new Array;
var fortsett:Boolean = true;

for(var i=0;i<10;i++) {
    while(fortsett) {
        var valgtTall=1 + Math.round(Math.random()*(34-1));
        if(minArray.indexOf(valgtTall,0) >= 0) {
            fortsett=true;
            trace(valgtTall + " er opptatt. Finner nytt...");
        }
        else {
            fortsett=false;
        }
    }
    minArray.push(valgtTall);
    trace(valgtTall);
    fortsett=true;    
}

2 个答案:

答案 0 :(得分:0)

一种简单和高度效率低下的方法就是这样:

var numbers:Vector.<uint> = new Vector.<uint>();

loop: while(numbers.length < 10) {
    var rand:uint = Math.random() * 10;

    for (var i:uint = 0; i < numbers.length; ++i) {
        if(rand == numbers[i]) {
            continue loop;
        }
    }

    numbers.push(rand);
}

答案 1 :(得分:0)

另一种对我来说非常好的方式:

var max:uint = 10;  // max random number
var i:int = 0;      
var l:int = 10;     // length of sequence to generate
var id:uint = 0;    // temp var for the ID
var ids:Vector.<uint> = new Vector.<uint>();

while (i < l)
{
    // generate a new random number until we found one that doesn't exist yet
    while (ids.indexOf(id) > -1) id = uint(Math.random()*max);

    // add it to the list
    ids.push(id);

    // next!
    i++;
}