【发布时间】:2021-05-15 16:55:22
【问题描述】:
我在此文件中收到此错误:
-- mid point circle drawing algoritm taken from here:
-- https://stackoverflow.com/questions/17163636/filled-circle-in-matrix2d-array
-- code translated from java
-- initates 2d array
matrix = {}
for i = 1, 2 do
matrix[i] = {}
end
-- given matrix and diameter populates array
function mCircle(matrix, d)
local startX = d/2
local startY = d/2
local r = d/2
mCircleRec(matrix, d, startX, startY, r, r)
--prints matrix
for i = 1, d do
for j = 1, d do
print(matrix[x][y])
end
end
end
function mCircleRec(matrix, d, startX, startY, x, y)
if (x >= d or y >= d or x < 0 or y < 0 or matrix[x][y] == 1)
then
return
elseif (matrix[x][y] == 9)
then
return
end
local r = d/2
if (((x - startX) * (x - startX) + (y - startY) * (y - startY)) <= (r * r))
then
matrix[x][y] = 1
else
matrix[x][y] = 9
end
mCircleRec(matrix, d, startX, startY, x+1, y); -- down
mCircleRec(matrix, d, startX, startY, x, y+1); -- right
mCircleRec(matrix, d, startX, startY, x-1, y); --up
mCircleRec(matrix, d, startX, startY, x, y-1); --left
mCircleRec(matrix, d, startX, startY, x-1, y-1); -- diagonal up-left
mCircleRec(matrix, d, startX, startY, x+1, y+1); -- diagonal right-down
mCircleRec(matrix, d, startX, startY, x+1, y-1); -- diagonal left-down
mCircleRec(matrix, d, startX, startY, x-1, y+1); -- diagonal right-up
end
mCircle(matrix, 20)
完整的错误信息:
lua: circle.lua:27: attempt to index a nil value (field '?')
stack traceback:
circle.lua:27: in function 'mCircleRec'
circle.lua:16: in function 'mCircle'
circle.lua:54: in main chunk
[C]: in ?
这是一个简单的实心圆算法,它创建一个二维数组并放置在一个实心圆内,代码是从 java 翻译的,原始代码在答案之一here 中。
我是 lua 新手,我查看了有关相同错误的所有其他问题,但没有一个是相关的。 提前感谢您的帮助
编辑:错字
编辑: 在进行故障排除时,我发现了另一个错误: 我弄错了二维数组的创建并修改了它:
- initates 2d array
local radius = 20
local diameter = radius * 2
-- Create a diameter x diameter array
matrix = {}
for i = 1, diameter do
matrix[i] = {}
for j = 1, diameter do
matrix[i][j] = 0 -- Fill the values here
end
end
改变这个并没有改变错误信息
【问题讨论】:
-
删除
local start Y = d/2中的空格 -
错误在
mCircleRec正文的第一行。您可能需要找到一个显示行号的文本编辑器。 -
感谢@EgorSkriptunoff,我修正了错字,但这并没有改变错误。
-
对不起@luther 错误是第 27 行,我直接在堆栈溢出编辑器上写了该评论并选择了错误的行
-
@luther 因为它不是语法错误。它定义了一个本地 nil 值
start和一个全局Y分配d/2所以没有什么可以捕获的。但是还有其他错误,而不是我发布他的代码时他报告的错误,所以我认为他没有复制粘贴导致索引错误的代码
标签: lua