sorting - 得到一个错误,即使我是一个数字,我也无法将 nil 与数字进行比较
问题描述
我正在尝试做一个简单的冒泡排序(我的代码可能看起来不专业,但我只是在学习)并且在我的冒泡排序函数中我收到一个错误代码,说我无法将 nil 与数字进行比较,即使我表中的所有值应该是数字。
local function bubblesort(array)
for getal = 1, #array do
for i = 1, #array do
if array[i] > array[i + 1] then
local temp = array[i]
array[i + 1] = array[i]
array[i + 1] = temp
end
end
end
return array
end
如果您需要查看它,这是制作表格并打印出来的其余代码
local function printtabel(tabel)
for _,v in pairs(tabel) do
io.write(v..' ')
end
print()
end
io.write("Geef seed, grootte en max: ")
local SEED = io.read("*n")
local GROOTTE = io.read("*n")
local MAX = io.read("*n")
math.randomseed(SEED)
local t = {}
for n = 1,GROOTTE do
t[n] = math.random(1,MAX)
end
bubblesort(t)
printtabel(t)
解决方案
我收到一个错误代码,说我无法将 nil 与数字进行比较,即使我的表中的所有值都应该是数字
嗯,计算机不只是编造东西,所以它试图比较一个数字和零。如果表中的所有值都是数字,那么它会从某个地方得到零,而不是表中的值之一。
当试图找出如此简单的错误时,创建一个非常小的样本并打印输出以确保所有内容都是您期望的循环内的内容,这会很有帮助。您可以点击此处在线查看和运行示例代码。结果:
i = 1, array[i] = 2
i+1 = 2, array[i+1] = 5
i = 2, array[i] = 5
i+1 = 3, array[i+1] = 1
i = 3, array[i] = 5
i+1 = 4, array[i+1] = nil
/var/task/bin/lua: main.lua:6: attempt to compare nil with number
所以你可以看到你的功能很大。示例数组中有三个值,您将 i 从 1 循环到 3,但您正在array[i]
与array[i+1]
循环中进行比较。这意味着当 i 为 3 时,您正在与 进行比较array[4]
。在 lua 中,您可以访问数组长度之外的元素,但它们返回 nil。
只需使用简单的输入逐步浏览您脑海中的代码或添加打印语句以查看实际使用的代码,这是一种调试代码的好方法,这些代码不能按照您认为的方式工作。
推荐阅读
- node.js - 在 Heroku 上部署使用 node rest api 的静态站点
- c# - 如何使用 C# 仅从文件名中提取日期
- php - PHP mysql 写锁不允许更新数据库。连接哪些锁应该能够更新
- excel - Excel - 获取两行之间的数据范围
- pandas - 更改日期时将同一行复制 n 次
- wamp - 在启动项目的 url 中添加 localhost 是个坏主意 - 警告
- swift - 我无法删除 UITableViewCell 中图像的左边框
- sql - 如何从货币列中删除特殊字符(只有美元)没有日期和国家
- angular - 验证带有动态部分的表单
- r - 使用 s3 方法和对象属性格式化 ggplot 比例尺