2014-12-16 2 views
0

Я сделал это, чтобы сгенерировать 10 случайных чисел без дубликатов, но это не работает. Иногда он генерирует дубликаты, но я не знаю почему. Может кто-нибудь, пожалуйста, скажите мне, что не так с кодом, есть ли у него что-то с indexOf?Создайте 10 случайных чисел, без дубликатов

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;  
} 
+1

это работает правильно для меня. Он никогда не производит дубликатов. –

+0

Ваш код выглядит отлично, удалите эту строку 'trace (valgtTall +" er opptatt. Finner nytt ... ")', которые дают иллюзию, которая генерирует дублированные значения. – akmozo

+0

Вы должны «трассировать (minArray)», чтобы определить, действительно ли дубликаты повторяются после завершения вашего кода. Я говорю, что их не должно быть, вы отфильтровываете их, проверяя 'indexOf()' правильно. – Vesper

ответ

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); 
} 
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++; 
} 
Смежные вопросы