Question

array={}
size=10

math.randomseed(os.time())
for i=1,size do
    array[i]=math.random(size)
    if(i>1) then
        for j=1,i do
            if  array[j]==array[i] then
                i=i-1
                break
            end
        end
    end
end

for i=1,size do
    print(array[i])
end

Le code ci-dessus est destiné à générer un tableau de nombres aléatoires de 1 à 'taille' éviter les doublons.J'ai essayé de l'atteindre que par la répétition de haut niveau "pour" boucle une fois de plus, si nouvellement généré de la valeur était présent avant, quelque part dans la gamme - par la diminution de son itérateur.En quelque sorte il ne fonctionne pas.Pourquoi?

C'est de modifier itérateur de la valeur à partir de l'intérieur de la boucle, pas possible?

Exemple de sortie de répéter les valeurs dans le tableau:

>lua5.1 "pairsss.lua"
2
1
10
6
5
2
5
7
7
4
>Exit code: 0
Était-ce utile?

La solution

La solution à votre problème est de mélanger le tableau, comme Aléatoire itération à remplir un tableau en Lua.

Pour répondre à votre question, à partir de Lua 5.1 manuel de référence:

§2.4.5 – Pour La Déclaration De

Tous les trois expressions sont évaluées qu'une seule fois, avant la boucle commence.Ils doivent tous avoir des chiffres.

Cela signifie que, peu importe la façon dont vous modifiez la valeur de i à l'intérieur de la for de la boucle, il n'affecte pas comment l'itération est effectuée.

Autres conseils

Vous pouvez utiliser un ensemble au lieu d'un tableau, comme fait par l'auteur de la question Randomise les nombres en Lua sans répétitions .Étant donné que l'une des réponses indique que votre ensemble se rapproche de la taille de votre gamme de numéros de Randome (disons, vous avez des numéros aléatoires 1 à 100 et votre ensemble est de taille 50), il sera de plus en plus difficile de trouver un numéro quin'a pas déjà été choisi.Vous pouvez voir cela pour un ensemble de taille 50 et cueillir un numéro aléatoire de 1 à 100, puis au moment où vous avez le jeu à moitié complet, vous avez une chance de trouver 25 à 50% de trouver le choix aléatoire est déjà utilisé dans votreensemble.Dans ce cas, Shuffling est la voie à suivre, comme expliqué dans l'une des réponses à ce poste ( Randomise les nombres en Lua sans répétitions ).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top