迷路(2次元配列)を解く方法をプログラムする必要があります。私は常に壁のすぐ左に留まる必要があり、出口点(常に同じ位置にある)に到達したとき、または解決策がないとき(そして迷路を通り抜けた後)にメソッドを終了する必要がありますエントリポイントに戻ってきました)。
私はそれをすべて行うことができました、問題はありません、私はそれが私がしたいことをしていることを視覚的に確認できます(ビジュアルを出力するインストラクターから他のいくつかのメソッドがあります)そして私のコンソールデバッグ出力も正しいです。
これは関連するコードです:
public static void main(String[] args) {
maze = generateMaze(10,10);
walk(1,0,0);
}
public static void walk(int x, int y, int direction) {
System.out.println("x = " + x + " y = " + y); //debug output
draw(x,y,maze); //draws current position
if (x == maze.length-1 && y == maze[1].length-2) { //terminate when reached exit
System.out.println("Geschafft!");
return;
}
if (x == 1 && y == 0 && direction == 3) { //terminate when at starting point again (no solution)
System.out.println("Keine Lösung möglich.");
return;
}
if (direction == 0) { //go down
if (maze [x][y+1]) {
walk(x,y,1);
}
walk(x,y+1,2);
}
if (direction == 1) { //go right
if(maze [x+1][y]) {
walk(x,y,3);
}
walk(x+1,y,0);
}
if (direction == 2) { //go left
if(maze [x-1][y]) {
walk(x,y,0);
}
walk(x-1,y,3);
}
if (direction == 3) { //go up
if(maze[x][y-1]) {
walk(x,y,2);
}
walk(x,y-1,1);
}
}
問題が1つだけあります。再帰を正しく終了するにはどうすればよいですか?これは私がコンソールから得るものです:
x = 1 y = 0
x = 1 y = 1
x = 1 y = 1
x = 1 y = 2
and so on...
x = 8 y = 8
x = 9 y = 8
Geschafft!
x = 8 y = 9
x = 8 y = 9
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at maze.MazeSolution.walk(MazeSolution.java:26)
at maze.MazeSolution.walk(MazeSolution.java:39)
and some more of that
私はエラーを理解しています。再帰は明らかに私が望む場所で終了せず、xまたはyが増加し、そこにない配列でインデックスを使用しようとします。
これらの状況のいずれかが実現したときに、再帰がreturnステートメントで終了しないのはなぜですか。
if (x == maze.length-1 && y == maze[1].length-2) { //terminate when reached exit
System.out.println("Geschafft!");
return;
}
if (x == 1 && y == 0 && direction == 3) { //terminate when at starting point again (no solution)
System.out.println("Keine Lösung möglich.");
return;
}
正しく終了するにはどうすればよいですか?
私はあなたの助けに大いに感謝し、初心者への愛を示し、そして何をすべきかを教えてくれます。