首页 > 解决方案 > 得到一个错误,即使我是一个数字,我也无法将 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)

标签: sortingluabubble-sort

解决方案


我收到一个错误代码,说我无法将 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。

只需使用简单的输入逐步浏览您脑海中的代码或添加打印语句以查看实际使用的代码,这是一种调试代码的好方法,这些代码不能按照您认为的方式工作。


推荐阅读