lua:尝试索引值为nil的值(字段'?')

我在这个文件中得到了这个错误:

-从这里获取中间点圆形绘图算法:
- https://stackoverflow.com/questions/17163636/filled-circle-in-matrix2d-array
-代码从java翻译

--启动2d数组
matrix = {}

为i = 1,2 do
    matrix [i] = {}
end

-给定矩阵和直径填充阵列
function mCircle(matrix,d)
    local startX = d / 2
    local startY = d / 2
    local r = d / 2
    mCircleRec(matrix,d,startX,startY,r,r)

    -打印矩阵
    为i = 1,d做
        为j = 1,d做
            print(matrix [x] [y])
        end
    end

结束

函数mCircleRec(matrix,d,startX,startY,x,y)
    if(x>= d or y>= d or x < 0或y < 0或matrix [x] [y] == 1)
    然后
        返回
    elseif(matrix [x] [y] == 9)
    然后
        返回
    结束

    为r= d / 2 local

    如果(((x-startX)*(x-startX)+(y-startY)*(y-startY))<=(r*r))
    然后
        matrix [x] [y] = 1
    其他
        matrix [x] [y ] = 9
    结束

    mCircleRec(matrix,d,startX,startY,x + 1,y); -下
    mCircleRec(matrix,d,startX,startY,x,y + 1); -右
    mCircleRec(matrix,d,startX,startY,x-1,y); -上
    mCircleRec(matrix,d, startX,startY,x,y-1); -左
    mCircleRec(matrix,d,startX,startY,x-1,y-1),-对角线向上
    mCircleRec(matrix,d,startX,startY,x + 1,y + 1); -对角线向下右
    mCircleRec(matrix,d,startX,startY,x + 1,y-1); -对角线向下左
    mCircleRec(matrix,d,startX,startY,x-1,y + 1); -对角线向上右
结束

mCircle(矩阵,20)

完整的错误消息:

lua:circle.lua:27:尝试索引值为nil的值(字段'?')
堆栈跟踪:
        circle.lua:27:在函数'mCircleRec'中
        circle.lua:16:在函数'mCircle'中
        circle.lua:54:在主干中
        [C]:在?

这是一个简单的填充圆算法,它创建一个2d数组并将其放置在一个填充的圆内,该代码从java翻译,并且原始代码位于此处的一个答案中 。


我是lua的新手,我看了每一个关于相同错误的问题,但没有一个是相关的。 先谢谢您的帮助


编辑:错别字


编辑: while时出现另一个错误: 我错误地创建了2d数组并对其进行了修改:

-启动2d数组

local半径= 20
local直径=半径* 2

-创建一个直径x直径的数组
矩阵= {}
对于我=1,直径做

    matrix [i]= {}

    for j = 1,直径做
        matrix [i] [j] = 0  -在此处填充值
    end

end

更改此项不会更改错误消息

点赞
用户2858170
用户2858170

你提供的代码没有引起引用的错误消息。

首先你有这个

local start Y = d/2

你已经修复了它

然后有一个错误的 if 语句

if (x >= d or y >= d or x < 0 or y < 0 or matrix[x][y] == 1)  --错误似乎在这一行(27)之间 
    then
        matrix[x][y] = 1
    then
        return
    elseif (matrix[x][y] == 0)
    then
        return
    end

其中有两个 then

只有在修复这些错误之后,你才能看到引用的错误。

mCirclexynil。因此 matrix[x][y] 是不可能的。

2021-02-12 08:54:23
用户14416269
用户14416269

原来问题是当我尝试打印数组时,我将x和y作为索引而不是i和j。

同时,一开始我用错误的方式定义了2D数组,像这样matrix = {{}},这是不起作用的。

2021-02-12 16:49:23