数组索引超出界限解决N皇后时的异常

时间:2016-12-07 19:37:41

标签: java arrays recursion backtracking

我正在研究使用递归回溯来解决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)

有关我应该在哪里编辑代码以摆脱此异常的反馈的任何建议?

1 个答案:

答案 0 :(得分:1)

你是否为该计划提供了论据? 它期望有一个integer参数。

public static void main(String[] args) {
       int n = Integer.parseInt(args[0]);
       solver(n);           
    }

如果您尝试访问不在args数组范围内的索引,它会上升java.lang.ArrayIndexOutOfBoundsException