0

だから私は単純な迷路ソルバーをやろうとしています(最初に深さ)。再帰メソッドを解決する手助けはしたくありませんが、何らかの理由で、セルの ArrayList の .add で NullPointerException がスローされます。その理由を教えてもらえますか? (MazeExample クラスは、NSEW へのポインターの単純な迷路を作成します。これは、私の先生から提供されたもので、コードをテストすることができます)。

public static void main(String[] args)
{
    MazeSolver solver = new MazeSolver();
    ExampleMaze example = new ExampleMaze();

    System.out.println(solver.stepsToSolveMaze(example.getStart()));    

}

これがメインで、これが MazeSolver オブジェクトです (現時点では、一度に 1 ステップずつ、最後までの移動回数のみをカウントします)。

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;

}
4

2 に答える 2

1

あなたの例では、visitedCells は設定されていないため、項目を追加しようとすると、NullPointerException が発生します。使用する前に初期化する必要があります。

visitedCells = new ArrayList<MazeCell>();

別の点として、breadCrumbs にも同じ問題があるため、おそらく初期化する必要があります。

breadCrumbs = new Deque<MazeCell>();
于 2013-03-18T07:17:13.257 に答える
1

配列 List を初期化していません。

stepsToSolveMaze に以下を追加

visitedCells = new ArrayList<MazeCell>();

次に要素を追加します

于 2013-03-18T07:17:18.093 に答える