При попытке запустить этот код я столкнулся с ошибкой, но не при компиляции. В конце каждого метода направления я вызываю следующий метод в том порядке, в котором должен идти. То, что я пытаюсь сделать, это сделать программу, которая будет читать лабиринт из файла и решить его. Решая это, я хочу, чтобы программа помещала P для пути, который он принял, и V для тех мест, которые уже были посещены. Программе разрешено идти вперед влево, а затем назад для каждого направления. Когда вы идете в другом направлении, вам придется по-прежнему следовать этим правилам, за исключением того, что то, как вы смотрите, теперь является новым.Программа компилируется, но она дает ошибку при запуске
Maze Код:
public static boolean goNorth(){
boolean success;
if(maze[startCol][startRow] == maze[finishCol][finishRow]){
return true;
}
if(maze[startCol][startRow - 1] == CLEAR){
maze[startCol][startRow - 1] = PATH;
startRow = startRow - 1;
goNorth();
if(maze[startCol][startRow - 1] == PATH){
maze[startCol][startRow - 1] = VISITED;
startRow = startRow - 1;
goNorth();
if (maze[startCol][startRow - 1] == VISITED){
goSouth();
}
}
}
goWest();
return true;
}
public static boolean goEast(){
boolean success;
if(maze[startCol][startRow] == maze[finishCol][finishRow]){
return true;
}
if(maze[startCol + 1][startRow] == CLEAR){
maze[startCol + 1][startRow] = PATH;
startCol = startCol + 1;
goEast();
if(maze[startCol + 1][startRow] == PATH){
maze[startCol + 1][startRow] = VISITED;
startCol = startCol + 1;
goEast();
if(maze[startCol + 1][startRow] == VISITED){
goWest();
}
}
}
goNorth();
return false;
}
public static boolean goSouth(){
boolean success;
if(maze[startCol][startRow] == maze[finishCol][finishRow]){
return true;
}
if(maze[startCol][startRow + 1] == CLEAR){
maze[startCol][startRow + 1] = PATH;
startRow = startRow + 1;
goSouth();
if(maze[startCol][startRow + 1] == PATH){
maze[startCol][startRow + 1] = VISITED;
startRow = startRow + 1;
goSouth();
if (maze[startCol][startRow + 1] == VISITED){
goNorth();
}
}
}
goEast();
return false;
}
public static boolean goWest(){
boolean success;
if(maze[startCol][startRow] == maze[finishCol][finishRow]){
return true;
}
if(maze[startCol - 1][startRow] == CLEAR){
maze[startCol - 1][startRow] = PATH;
startCol = startCol - 1;
goWest();
if(maze[startCol - 1][startRow] == PATH){
maze[startCol - 1][startRow] = VISITED;
startCol = startCol - 1;
goWest();
if(maze[startCol - 1][startRow] == VISITED){
goEast();
}
}
}
goSouth();
return false;
}
}
Maze.txt:
20 7
0 18
6 12
xxxxxxxxxxxxxxxxxx x
x x xxxx x
x xxxxx xxxxx xx x
x xxxxx xxxxxxx xx x
x xx xx x
x xxxxxxxxxx xx x
xxxxxxxxxxxx xxxxxxx
Ошибка:
http://s22.postimg.org/etar0eq1t/Code.png
Это слишком много кода. Обрежьте это до небольшой программы, которая показывает вашу проблему. – Keppil
Судя по ошибке и вопросу, я не думаю, что он знает, как это сделать. –
Ваш захват экрана ошибки не отображает сообщение об ошибке, а только часть стека вызовов. Мой хрустальный шар говорит, что ошибка - переполнение стека. Похоже, что у вас может быть бесконечная рекурсия. –