所以我有這些代碼行生成一個隨機數actualy一個唯一的隨機數,但是這個代碼是不是很好,當你必須生成160個數字。每個生成的數字都被添加到一個數組中,並且每次生成一個新數字時都將檢查該數組,並且如果該數字在數組上,則如果該數字不在它所顯示的數組中,則會生成另一個數字。請幫我簡化這段代碼,以便它不需要那麼多的內存,而且:一切運行良好,直到隨機生成器重新開始157然後它破解...我似乎無法知道爲什麼... 請幫我做它更好! THX請幫我簡化這個隨機生成函數
var randomNum:int = 0;
var randomGen:int = 0;
var myArray:Array = [];
function setup()
{
displayRandomNumber();
var_corect.addEventListener(MouseEvent.CLICK, randomNumberEvent);
}
setup();
function randomNumberEvent(e:MouseEvent)
{
displayRandomNumber();
}
function displayRandomNumber()
{
randomGen = randBetween(1, 160);
randomNumberText.text = randomGen.toString();
trace ('Number is:'+ randomNumberText.text);
if(myArray.indexOf(randomGen) == -1){
myArray.push(randomGen);
}else{
displayRandomNumber()
}
trace("my array" + myArray);
}
function randBetween(min:int, max:int):int
{
return Math.round(Math.random() * (max - min) + min);
}
由於您的算法設計,它在接近尾聲時變得效率低下。考慮:最後,隨機選擇最後一個不存在的數字的可能性僅爲1/168 - 所有其他值必須循環和重新選擇。此外,掃描陣列的成本是掃描一個元素的168倍。總之,你最後一次迭代將比第一次慢28.224倍。倒數第二次將減慢14028倍。倒數第三將會慢9296倍。迭代成本與(168 /(168-N))* N成正比。 –