解决 N 个皇后时的数组索引超出范围异常
Posted
技术标签:
【中文标题】解决 N 个皇后时的数组索引超出范围异常【英文标题】:Array Index Out of Bounds Exception while solving N Queens 【发布时间】:2016-12-07 19:37:41 【问题描述】:我正在编写使用递归回溯来解决 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】:您是否为程序提供参数?
它期望有一个integer
参数。
public static void main(String[] args)
int n = Integer.parseInt(args[0]);
solver(n);
如果您尝试访问不在args
数组范围内的索引,它会上升java.lang.ArrayIndexOutOfBoundsException
【讨论】:
是否有其他方法可以推荐使用 main 方法进行测试? 你如何运行你的课程?如果您在命令行中运行,如果您想在程序启动时使用8
值来评估您的板阵列,您可以执行java Queen 8
。如果您的电路板应该始终具有8
的大小,则在创建电路板时不应使用参数,而应在实例化电路板时使用常量。以上是关于解决 N 个皇后时的数组索引超出范围异常的主要内容,如果未能解决你的问题,请参考以下文章