Lua出现了PANIC错误。

我正在用C++创建数独求解器,同时实现Lua脚本来解决谜题。我创建了以下Lua代码,但每当我的C++代码到达第一个lua_call实例时就会出现“尝试调用空值”的错误。

在SciTE中编译代码时,我得到以下错误:

lua: SudokuSolver.lua:99: 需要“end”(以关闭第61行的“for”) 附近''

在函数末尾添加三个end可以清除该错误,但会导致C++程序出错。有人可以看一下我的Lua,看看是否有语法错误或其他问题导致这种情况吗?谢谢

代码

--表声明
SudokuGrid = {}

function RecieveGrid(_Pos,_Value)
    -- 从C ++接收_Pos位置上的单元格值
    SudokuGrid [_Pos] = _Value
end

function SolveSudoku(_Pos)
    -- 递归函数求解数独谜题
    local iNewValue = 1

    -- 如果位置大于等于82,则所有单元格均已解决
    if(_Pos >=82) then
        return true
    end

    -- 如果位置已经有值
    if(SudokuGrid[_Pos]!= 0) then
        return SolveSudoku(_Pos + 1)
    else
        while(true) do
            SudokuGrid[_Pos] = iNewValue
            iNewValue = iNewValue + 1

            -- 如果单元格的新值大于9,则其无效
            if(SudokuGrid [_Pos] > 9 ) then
                --重置值
                SudokuGrid [_Pos] = 0
                return false
            end

            if(IsValid(_Pos) and SolveSudoku(_Pos +1)) then
                return true
            end
        end
    end
end

function IsValid(_Pos)
    -- 计算网格中的列和行
    x = _Pos % 9
    if(x == 0) then
        x = 9
    end
    y = math.ceil(_Pos / 9)

    -- 检查行
    for i=1,9 do
        CheckVal = ((y-1)*9) + i
        if(CheckVal == _Pos) then
            -- 什么都不做
        else if(SudokuGrid [_Pos] == SudokuGrid[CheckVal] and SudokuGrid[_Pos] ~= 0) then
            return false
        else
            -- 什么都不做
        end
    end

    -- 检查列
    for i=1,9 do
        CheckVal = ((i-1) * 9) +x
        if(CheckVal == _Pos) then
            -- 什么都不做
        else if(SudokuGrid [_Pos] == SudokuGrid [CheckVal] and SudokuGrid [_Pos] ~= 0) then
            return false
        else
            -- 什么都不做
        end
    end

    -- 检查3X3网格
    SquareCol = math.ceil(x/3)
    SquareRow = math.ceil(y/3)
    StartVal = (SquareCol-1)*27 +(SquareRow*3)-2
    for j=0,2 do
        for i=0,2 do
            CheckVal = StartVal+i
            if(CheckVal == _Pos) then
                -- 什么都不做
            else if(SudokuGrid [_Pos] == SudokuGrid [CheckVal] and SudokuGrid [_Pos] ~= 0) then
                return false
            else
                -- 什么都不做
            end
        end
        StartVal = StartVal + 9
    end

    return true
end

function SendGrid(_Pos)
    -- 将_Pos位置上的值发送到C ++
    return SudokuGrid [_Pos]
end
点赞
用户1009479
用户1009479

语法错误在所有包含 else if 的行中:

else if ( SudokuGrid[_Pos] == SudokuGrid[CheckVal]and SudokuGrid[_Pos] ~= 0 ) then

在 Lua 中,请使用 elseif。如果使用 else if,需要更多的 end 结束符。

elseif SudokuGrid[_Pos] == SudokuGrid[CheckVal] and SudokuGrid[_Pos] ~= 0 then
2014-08-21 01:41:09