Pregunta

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

El código de arriba estaba destinado a generar una matriz de números aleatorios de 1 a 'tamaño', evitando la repetición de valores.Traté de lograr que mediante la repetición de nivel superior 'para' bucle, una vez más, si se acaba de generar valor estaba presente antes de que en algún lugar en la serie - por la disminución de su iterador.De alguna manera no funciona.Por qué?

Es la modificación de iterador de valor del interior del bucle no es posible?

Ejemplo de salida con la repetición de los valores en la matriz:

>lua5.1 "pairsss.lua"
2
1
10
6
5
2
5
7
7
4
>Exit code: 0
¿Fue útil?

Solución

La solución a tu problema es la reorganización de la matriz, como Al azar de la iteración para rellenar una tabla en Lua.

Para responder a su pregunta, de Lua 5.1 manual de referencia:

§2.4.5 – Para La Declaración De

Todos los tres de control de las expresiones se evalúan sólo una vez, antes de que el bucle se inicia.Todos ellos han resultado en números.

Eso significa que, no importa cómo cambie el valor de i dentro de la for bucle, no afectan la manera en la iteración se realiza.

Otros consejos

Puede usar un conjunto en lugar de una matriz, como lo hace el autor de la pregunta Aleatorizan números en LUA sin repeticiones .Como se señala una de las respuestas, a medida que su conjunto se acerca de tamaño a su rango de números de Randome (por ejemplo, tiene números aleatorios de 1 a 100 y su conjunto es el tamaño 50) será cada vez más difícil encontrar un número queaún no ha sido recogido.Puede ver que para un conjunto de tamaño 50 y elegir un # aleatorio de 1 a 100, luego, cuando tenga la mitad de la mitad establecida, tiene una probabilidad de 25-50% de encontrar la selección aleatoria ya está en uso en sucolocar.En ese caso, Shuffling es el camino a seguir, como se explica en una de las respuestas a esa publicación ( aleatorizan números en LUA sin repeticiones ).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top