我已经使这个生成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;
}
答案 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++;
}