从1-40获取唯一的随机数

时间:2014-06-24 06:10:32

标签: actionscript-3

我希望每次从1-40号获得唯一的随机数,而不使用数组。是否有任何优化的方法可以在动作脚本3中获取它。

2 个答案:

答案 0 :(得分:3)

不,你必须使用排列,因为你必须记录你已经生成的那些数字。使用这些数字需要一组,即Array。通过使用其他数据类型可以解决这个问题,但它们基本上会缩小到某种数组。

一个简单的排列代码如下所示:

class Permutation {
    private var _a:Array; // or Vector.<int> if you like
    private var n:int; // next element
    public function Permutation() {
        reset(1);
    }
    public function reset(size:int=100):void {
        _a.length=0;
        for (n=0;n<size;n++) _a.push(n);
        for (n=0;n<size;n++) {
            var x:int=Math.floor(size*Math.random());
            if (x==n) continue;
            var swap:int=_a[x];
            _a[x]=_a[n];
            _a[n]=swap;
        }
        n=0;
    }
    public function getNext():int {
        if (n==_a.length) return -1; // or any error value
        n++;
        return _a[n-1];
    }
}

答案 1 :(得分:-1)

没有数组。

var generatedNumberCount:int;
var generatedNumberRef:Object = {};

for(var i:int = 0; i < 150; i++)
{
    var result:Number = generateRandomInt(50);
    trace(result);
}
trace(generatedNumberCount)
function generateRandomInt(limit:int):Number
{
    if(generatedNumberCount >= limit)
    {
        return NaN;
    }
    var output:int = Math.ceil(Math.random() * limit);  
    while(generatedNumberRef[output] != undefined)
    {
        output = Math.ceil(Math.random() * limit);
    }
    generatedNumberRef[output] = true;
    generatedNumberCount++;
    return output;
}