For 循环不能完全正常工作 Lua

D12*_*D12 2 lua

for amountofspinstodo = 1, 100 do
    local pick = math.random( 1, #box.CONTENTS )
    local rarity = INV:CalculateItemRarity()
    local ITEMPICK = INV:GetDataFromName(box.CONTENTS[pick])
    local RARITYS_OF_ITEM_PICK = ITEMPICK.RARITYS
    if has_value(RARITYS_OF_ITEM_PICK, rarity)then
        tbl.spintable[amountofspinstodo] = { NAME = box.CONTENTS[pick], RARITY = rarity }
        print(amountofspinstodo)
    else
        amountofspinstodo = amountofspinstodo - 1
        print(amountofspinstodo)
    end
end
Run Code Online (Sandbox Code Playgroud)

我做了这个 for 循环来检查一个项目是否有一定的稀有性,如果它确实允许它成为一个项目,但如果它没有稀有性,那么它应该让 for 循环再做一次,直到每个项目都被选中。但是,当我运行 for 循环时,它会这样做,但我不知道为什么。

这是控制台输出

有些数字是重复的,例如 48 和 48,它们应该是 48 和 49。

任何帮助,将不胜感激!

-谢谢 D12

Nif*_*fim 5

amountofspinstodo 不能从你的 for 循环内部更改,并坚持到循环的下一次运行。

参考:

第三,永远不要改变控制变量的值:这种改变的影响是不可预测的。如果要在正常终止之前中断 for 循环,请使用 break。- Lua 编程:4.3.4 - 数字

这是一个简单的示例,您可以用来查看:

for i = 1, 10 do
    print(i) 
    i = 10
end
Run Code Online (Sandbox Code Playgroud)

相反,您应该使用 while 循环:

local amountofspinstodo = 1
while(amountofspinstodo < 100) do
    local pick = math.random( 1, #box.CONTENTS )
    local rarity = INV:CalculateItemRarity()
    local ITEMPICK = INV:GetDataFromName(box.CONTENTS[pick])
    local RARITYS_OF_ITEM_PICK = ITEMPICK.RARITYS
    if has_value(RARITYS_OF_ITEM_PICK, rarity)then
        tbl.spintable[amountofspinstodo] = { NAME = box.CONTENTS[pick], RARITY = rarity }
        print(amountofspinstodo)
        amountofspinstodo = amountofspinstodo + 1
    else
        print(amountofspinstodo)
    end
end
Run Code Online (Sandbox Code Playgroud)

  • [文档](https://www.lua.org/pil/4.3.4.html) 特别警告这一点:_“[...] 你永远不应该更改控制变量的值:这样的效果变化是不可预测的。”_ 实际上,看起来您可以在主体中更改您想要的所有变量...但更改将在以下迭代中被丢弃。 (3认同)