Хорошая первая попытка. Есть несколько проблем с вашим кодом:
В методе перемещения условие выхода для шагов должно просто возвращаться, как и для недопустимых строк / столбцов. Вы также должны хранить «X», куда Рыцарь движется. И наконец, сразу же уменьшите переменную steps при вызове рекурсии.
Эти изменения выглядят так:
public static void move(String array[][], int steps, int row, int col) {
if (steps < 0 || row < 0 || row >= 8 || col < 0 || col >= 8)
return;
array[row][col] = "X";
move(array, steps - 1, row - 2, col - 1);
move(array, steps - 1, row - 2, col + 1);
move(array, steps - 1, row + 2, col - 1);
move(array, steps - 1, row + 2, col + 1);
move(array, steps - 1, row - 1, col - 2);
move(array, steps - 1, row - 1, col + 2);
move(array, steps - 1, row + 1, col - 2);
move(array, steps - 1, row + 1, col + 2);
}
И для правильной печати на плате используйте print
вместо println
при печати строки:
public static void printBoard(String array[][]) {
for (int row = 0; row < 8; row++) {
for (int col = 0; col < 8; col++) {
System.out.print(array[row][col]);
}
System.out.println();
}
}
После этого вы получите ожидаемый результат.