我正在研究使用递归回溯来解决8个皇后问题的代码(将n个国际象棋皇后放在n×n板上,这样任何一个皇后都不会互相攻击)。
我的任务是创建两个方法: 编写一个公共的solveQueens(int n)方法来解决nxn板的问题
编写一个私有递归placeQueen(board, column)
方法,尝试将一个女王放在指定的列中。
到目前为止,我已经在我的程序中写了这个:
public class Queen {
public static boolean isLegal(int[] board, int n) {
for (int i = 0; i < n; i++) {
if (board[i] == board[n]) {
return false;
}
if ((board[i] - board[n]) == (n - i)) {
return false;
}
if ((board[n] - board[i]) == (n - i)) {
return false;
}
}
return true;
}
public static void solver(int n) {
int[] board = new int[n];
PlaceQueen(board, 0);
}
private static int[] PlaceQueen(int[] board, int column) {
int n = board.length;
if (column == n); else {
for (int row = 0; row < n; row++) {
board[column] = row;
if (isLegal(board, column)) {
PlaceQueen(board, column + 1);
}
}
}
return (board);
}
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
solver(n);
}
}
我的程序成功编译,但每当我尝试运行它时,我都会收到此错误。
线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:0 在Queen.main(Queen.java:39)
有关我应该在哪里编辑代码以摆脱此异常的反馈的任何建议?
答案 0 :(得分:1)
你是否为该计划提供了论据?
它期望有一个integer
参数。
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
solver(n);
}
如果您尝试访问不在args
数组范围内的索引,它会上升java.lang.ArrayIndexOutOfBoundsException