所以我想尝试做一个简单的迷宫求解器(深度优先)。我不希望帮助解决递归方法,但由于某种原因,这会导致NullPointerException在ArrayList的.add单元上进行修复,任何人都可以帮助我知道原因吗? (MazeExample类由我的老师提供了一个简单的迷你指针N S E W,因此我们可以尝试测试我们的代码。)
public static void main(String[] args)
{
MazeSolver solver = new MazeSolver();
ExampleMaze example = new ExampleMaze();
System.out.println(solver.stepsToSolveMaze(example.getStart()));
}
这是主要的,这里是MazeSolver对象(截至目前它只计算结束时的移动次数,一次一步)。
public class MazeSolver
{
private int steps=0;
private ArrayList<MazeCell> visitedCells;
private Deque<MazeCell> breadCrumbs;
public int stepsToSolveMaze(MazeCell cell)
{
visitedCells.add(cell); //this is where the exception is getting thrown.
breadCrumbs.push(cell);
if (cell.isFinish())
{
return 1;
}
if (cell.east() != null && !visitedCells.contains(cell.east()))
{
steps += stepsToSolveMaze(cell.east());
}
if (cell.south() != null && !visitedCells.contains(cell.south()))
{
steps += stepsToSolveMaze(cell.south());
}
if (cell.west() != null && !visitedCells.contains(cell.west()))
{
steps += stepsToSolveMaze(cell.west());
}
if (cell.north() != null && !visitedCells.contains(cell.north()))
{
steps += stepsToSolveMaze(cell.north());
}
else
{
steps--;
stepsToSolveMaze(breadCrumbs.pop());
}
return steps;
}
答案 0 :(得分:1)
在您的示例中,从未设置visitedCells,因此当您尝试向其添加项时,会导致NullPointerException。您需要在使用它之前对其进行初始化:
visitedCells = new ArrayList<MazeCell>();
另一方面,breadCrumbs也会遇到同样的问题,所以你应该在你的时候初步确定它:
breadCrumbs = new Deque<MazeCell>();
答案 1 :(得分:1)
您没有初始化数组列表。
在stepsToSolveMaze
中添加以下内容visitedCells = new ArrayList<MazeCell>();
然后添加元素