对于不能完全正常工作的循环,Lua 对于amountofspinstodo=1100 do 本地拾取=math.random(1,#box.CONTENTS) 本地稀有性=投资:计算稀有性() local ITEMPICK=INV:GetDataFromName(box.CONTENTS[pick]) 本地稀有品种的稀有品种=稀有品种 如果有价值(物品的稀有性,稀有性),那么 tbl.spintable[amountofspinstodo]={NAME=box.CONTENTS[pick],RARITY=RARITY} 打印(amountofspinstodo) 其他的 amountofspinstodo=amountofspinstodo-1 打印(amountofspinstodo) 结束 结束
我做了这个for循环来检查一个项目是否有一定的稀有性,如果它确实允许它成为一个项目,但是如果它没有稀有性,那么它应该让for循环再次这样做,直到每个项目都被选中。然而,当我运行for循环时,它会这样做,我不知道为什么 有些数字是重复的,比如48和48,应该是48和49 任何帮助都将不胜感激对于不能完全正常工作的循环,Lua 对于amountofspinstodo=1100 do 本地拾取=math.random(1,#box.CONTENTS) 本地稀有性=投资:计算稀有性() local ITEMPICK=INV:GetDataFromName(box.CONTENTS[pick]) 本地稀有品种的稀有品种=稀有品种 如果有价值(物品的稀有性,稀有性),那么 tbl.spintable[amountofspinstodo]={NAME=box.CONTENTS[pick],RARITY=RARITY} 打印(amountofspinstodo) 其他的 amountofspinstodo=amountofspinstodo-1 打印(amountofspinstodo) 结束 结束,lua,Lua,我做了这个for循环来检查一个项目是否有一定的稀有性,如果它确实允许它成为一个项目,但是如果它没有稀有性,那么它应该让for循环再次这样做,直到每个项目都被选中。然而,当我运行for循环时,它会这样做,我不知道为什么 有些数字是重复的,比如48和48,应该是48和49 任何帮助都将不胜感激 -感谢D12amountofspinstodo无法从for循环内部更改,并持续到循环的下一次运行 参考资料: 第三,永远不要更改控制变量的值:这种更改的效果是不可预测的。如果要在正常终止前中断for循环,请
-感谢D12
amountofspinstodo
无法从for循环内部更改,并持续到循环的下一次运行
参考资料:
第三,永远不要更改控制变量的值:这种更改的效果是不可预测的。如果要在正常终止前中断for循环,请使用break。-
下面是一个简单的示例,您可以使用它来查看:
for i = 1, 10 do
print(i)
i = 10
end
相反,您应该使用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
local amountofspinstodo=1
而(amountofspinstodo<100)do
本地拾取=math.random(1,#box.CONTENTS)
本地稀有性=投资:计算稀有性()
local ITEMPICK=INV:GetDataFromName(box.CONTENTS[pick])
本地稀有品种的稀有品种=稀有品种
如果有价值(物品的稀有性,稀有性),那么
tbl.spintable[amountofspinstodo]={NAME=box.CONTENTS[pick],RARITY=RARITY}
打印(amountofspinstodo)
amountofspinstodo=amountofspinstodo+1
其他的
打印(amountofspinstodo)
结束
结束
当Nifim退出时,您不能
但看看你的代码,很明显你实际上是在一个for循环中做两个实际的循环,这显然是行不通的
将代码移动一点,您会得到:
旋转=1100 do时的
本地精选、稀有
重复
pick=math.random(1,#box.CONTENTS)
稀有性=投资:计算稀有性()
local ITEMPICK=INV:GetDataFromName(box.CONTENTS[pick])
本地稀有品种的稀有品种=稀有品种
打印(旋转)
直到有价值(物品的稀有性、稀有性)
tbl.spintable[spins]={NAME=box.CONTENTS[pick],RARITY=RARITY}
结束
正如您所看到的,有一个从1到100的外部循环,还有一个内部循环,它重复一些代码,直到您对结果感到满意。您好,欢迎来到Stack Overflow!从技术上讲,您的代码正在执行您告诉它的操作,如果稀有性不匹配,请从
amountofspins
中减去1。但是如果amountofspins
要匹配表中的项目数,最好使用print(#tbl.spintable)
。另外,我认为您可能会考虑<代码>表。插入(TBL.SPTINTURE,{…})<代码>,而不是您现在如何做。看起来您错过了在您所发布的代码中for循环的开始,可以包括吗?@ NIFIM抱歉,我已经添加了它。您不能从Afor for循环中更改循环迭代器值,您将希望使用while循环,而不是while循环。您的意思是“不能”还是“不应该?”不能,简单的示例:对于i=1,10 do print(i);i=10;end
特别提醒注意:“[…]您永远不应该更改控制变量的值:此类更改的效果是不可预测的。”实际上,您可以随心所欲地更改主体中的变量。。。但是在接下来的迭代中,更改将被放弃。@canon谢谢,我正在寻找一份确切的文档,以包含在我的答案中。