ici dans l'exemple j'ai une liste de 100 nombre que je veux avoir dans un ordre alléatoire sans avoir 2 fois le même nombre
ça fonctionne, mais je ne sais pas si c'est la meilleur façon de faire ! Car sur la fin la boucle parcourt la liste jusqu'à trouver un emplacement vide .... et si on demande une tres grande liste, c'est peut être un peu gourmand en ressource ! Qu'en pensez vous ?
Code : Tout sélectionner
Global Dim RandomList.l(10)
Procedure Liste(Nb.l)
RandomSeed(ElapsedMilliseconds())
ReDim RandomList(Nb)
n=0 ; Noter compteur
Repeat
n=n+1 ;
therand=Random(Nb)
countloop=0
Repeat
If RandomList(therand)>0 ; si il y a déjà une valeur a cette endroit on regarde juste apres
therand+1
countloop+1 ;on compte le nombre de fois ou ne peut pas mettre la valeur
EndIf
If therand>=Nb
therand=0
EndIf
If countloop>=nb ; si on rate le même nombre de fois que le nombre max de notre liste alors c'est qu'on a tout remplit !
Break 2;
EndIf
Until RandomList(therand)=0
RandomList(therand)=n
Until n=Nb
EndProcedure
NB=100
Liste(NB)
For z=0 To NB-1
Debug "Rand("+Str(z)+")="+Str( RandomList(z))
Next