删除try / catch异常

时间:2013-03-20 14:56:21

标签: java exception try-catch sudoku

我正在使用数独求解器并且solve-method给出了一个错误,我暂时用“try and catch”异常“解决”了这个错误。

但是,我有点担心我会抓住ArrayIndexOutOfBoundsException。我只想修复错误而不是将其隐藏在try / catch异常中。

这就是try / catch的样子:

    try {
        if (puzzle.getNum(i, j) != puzzle.blank)
            return solve(nexti, nextj);
    } catch (ArrayIndexOutOfBoundsException e) {
        return true;
    }

我在想,因为我已经在x > 8时获得了信息,现在是时候更改行了,这会导致y++。当y > 8时,应该完成程序,因为所有81(9x9)个单元格都已填满。

我正在考虑改变一个简单的

的try / catch方法
if((i > 8) && (j > 8)){
        return true;
}   

但这也给了我一堆错误。

我确信修复非常简单但在概念上很重要。

2 个答案:

答案 0 :(得分:1)

我会在方法的开头添加此检查:

if( i >= puzzle.puzzleSize || j >= puzzle.puzzleSize )
{
    return false;
}

如果你在任何一个方向上超出了拼图板的范围,你显然没有找到解决方案,因此你返回false。你的nexti和nextj的计算可以在这个检查之后,因为下一个递归调用将处理它们超出界限时的情况。

你可能会想说“好吧,我的下一次计算使用模数,所以它永远不会超出范围。”这是真的,但你也不能保证使用正确的参数调用方法,所以值得检查。

答案 1 :(得分:0)

由于您使用的是递归方法,因此您应该将第一行代码作为“结束条件”。

添加

if((i > 8) && (j > 8)){
      return true;
}

在你的方法开始时应该做的伎俩(如果你确定在j <8时你永远不会发送i = 9)。这样做的其他错误是什么?