为什么我的代码不比较第一个数和最后一个数呢?

我需要在我的脚本中比较多达5个数。这也运行得相当不错。但是,我的第一个和最后一个数字没有被比较。我的代码有什么问题呢?

local loaded = game.Workspace.TrommelValue.Value
local randomkugel =  {}

for i = 0,loaded-1 do
    randomkugel[i] = math.random(1,6)
    for index = 0, i+1 do
        if i ~= index then
            if randomkugel[i]==randomkugel[index] then
                randomkugel[i]=math.random(1,6)
                index = 0
            end
        end
    end
end

谢谢您的帮助!

点赞
用户2858170
用户2858170

我不知道 game.Workspace.trommelValue.value 是什么,但假设它是一个正数。

第一次循环

-- 给 `randomkugel[0]` 赋一个随机整数,范围为 [1-6]
randomkugel[0] = math.random(1,6)

现在你运行内部循环的第一次。第一个循环被跳过了,因为 i == index。第二个循环被跳过了,因为 randomkugel[i] 是随机数,而 randomkugel[index]nil

外部循环的第二次迭代。此时 i 为 1,random[1] 获得了一个从 [1-6] 中随机的值。

内部循环: 第一次运行中,i1index0,所以第一个 if 语句被执行了。randomkugel[1] 可能随机等于 randomkugel[0]。在这种情况下,你需要给 randomkugel[1] 分配一个新的随机值,并将 index 设置为 0,但这没有任何影响。如果两个值都不相等,那么什么也不会发生。内部循环的第二个循环,i 仍然是 1index2。由于没有 randomkugel[2],这次循环什么也没做。

由于你每次都是与 nil 进行比较,所以你总是会跳过内部循环的最后一个循环。所以实际上你的内部循环是

for index = 0, i do
  if i ~= index then
    if randomkugel[i]==randomkugel[index] then
      randomkugel[i]=math.random(1,6)
    end
  end
end

我猜你最大的误解在于你无法在循环体内部重置循环计数变量 index。对 index 的任何更改仅在当前迭代中有效。

2021-02-24 13:20:50