Я работаю над 8-головоломкой для класса и немного расстраиваюсь, проверяя код.Мне нужно написать код относительно движения влево, вправо, вверх и вниз.Когда я удаляю право, код выдает ошибку «index of bounds -1» для двойного массива после расширения, чтобы получить узлы-преемники и добавить их.Правильный ли приведенный ниже код для прохождения лабиринта / преемников, который возвращает дочерний элемент родителю?Что-то не так в коде слева, вверх, вниз и вправо?
Когда я возвращаюсь к нескольким тестам, я вижу, что движение 0 перемещается вправо, а затем вниз, когда оно достигает края, поэтому я не уверен, что приведенный ниже код действительно работает правильно, илиесли что-то должно быть изменено.
Головоломка должна выдавать:
1 2 3
4 5 6
7 80
Типичный вывод показывает:
1 7 8
5 4 2
3 6 0
Таким образом, путь кажетсябыть неправым, и я считаю, что это связано с кодом движения ниже, но я не уверен.Вопрос, который у меня есть, - это точный код ниже, нужно ли что-то менять в нем?С этим связано что-то, вызывающее ArrayIndexoutOfBounds -1, или это что-то еще?
ArrayList<Node> successors = new ArrayList<Node>();
//generate a successor from moving the 0 to the right
if (col < size-1) {
int[][] right = Board.copyBoard(board);
right[row][col] = right[row][col + 1];
right[row][col+1] = 0;
successors.add(new Node(right));
} else if (col < size - 1) {
int[][] left = Board.copyBoard(board);
left[row][col] = left[row][col-1];
left[row][col-1] = 0;
successors.add(new Node(left));
} else if (row < size-1) {
int[][] down = Board.copyBoard(board);
down[row][col] = down[row + 1][col];
down[row + 1][col] = 0;
successors.add(new Node(down));
} else if (row < size - 1) {
int[][] up = Board.copyBoard(board);
up[row][col] = up[row-1][col];
up[row-1][col] = 0;
successors.add(new Node(up));
}
return successors;