找回密码
 register

QQ登录

只需一步,快速开始

查看: 1202|回复: 0

[游戏教程] LUA常见错误:遍历数组的微妙BUG错误

[复制链接]

[游戏教程] LUA常见错误:遍历数组的微妙BUG错误

[复制链接]
  • 打卡等级:热心大叔
  • 打卡总天数:94
  • 打卡月天数:17
  • 打卡总奖励:94
  • 最近打卡:2025-01-18 01:28:20
Waylee

主题

0

回帖

1万

积分

仙帝

积分
12364
Waylee 2023-5-12 21:04 | 显示全部楼层 |阅读模式

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×
这个代码试图移除数组a中的所有偶数,但是由于在遍历过程中修改了数组,会导致一些元素被错误地跳过,这就是这个代码中的BUG。

a = {}
a[1] = 1
a[2] = 2
a[3] = 4
a[4] = 4
a[5] = 5

i = 1
while i <= table.getn(a) do
    if a % 2 == 0 then
        table.remove(a, i)
    end
    i = i + 1
end

for i = 1, table.getn(a) do
    print(i, a)
end


这段代码试图移除数组a中的所有偶数元素。然而,当你运行这个代码时,你会发现结果并不是你所期待的。尽管2被成功移除了,但4却还在数组中。

这是因为当你从数组中移除一个元素时,所有后面的元素都会向前移动一位。这意味着当i增加时,你可能会跳过一些元素。在上面的代码中,当i为2时,2被移除,3和4都向前移动一位。然后i增加到3,所以3被跳过,没有被检查是否是偶数。

这是一个常见的编程错误,不仅在Lua中,在很多其他编程语言中也会遇到。一种修复这个问题的方法是从后向前遍历数组:

游客,如果您要查看本帖隐藏内容请回复

在每次循环中,我们检查a是否是偶数,如果是,我们就移除它,否则,我们让i增加1。这样,我们就不会跳过任何元素。
您需要登录后才可以回帖 登录 | register

本版积分规则

雪舞知识库 | 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 |天天打卡

GMT+8, 2025-1-20 00:55 , Processed in 0.096241 second(s), 8 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

快速回复 返回顶部 返回列表