我必须为类写一个程序来测试一个2D-Array,也就是 "8个皇后问题"。我们要做的就是编写代码来测试一个给定的2D-Array是否对所有8个皇后都有有效的定位,也就是说。
只有 一个 王后 行.
只有 一个 王后 专栏.
只有 一个 王婆卖瓜 对角线.
我的问题是对角线迭代。我得到一个 Index 8 out of bounds for length 8
错误。
int gitter [][] // name for the 2D-Array
public static boolean gitterIstRichtig = true; // this is to check if conditions are met
for (row = 0; row <= gitter.length - 1; row++)
{
queens = 0;
for (column = 0; column <= gitter[0].length - 1; column++)
{
queens += gitter[row][column];
if ((gitter[row][column] == 1) && ((row + 1) <= gitter.length - 1))
{
if ((column + 1) <= gitter[0].length - 1)
{
int n = 1;
while ((column + n) <= gitter[0].length - 1)
{
if ((gitter[row + n][column + n] == 1)) // HERE IS WHERE THE ERROR POINTS TO
{
gitterIstRichtig = false;
}
n++;
}
}
if ((column - 1) >= 0)
{
int n = 1;
while ((column - n) >= 0)
{
if ((gitter[row + n][column - n] == 1)) // HERE IS WHERE THE ERROR POINTS TO
{
gitterIstRichtig = false;
}
n++;
}
}
}
}
}
你的代码看起来很复杂。英文和德文变量之间的混合让人困惑。 columns = Spalten, gitter = grid
总之... 我想问题出在 gitter[row + n][column + n]
. 你检查一下 column+n
在有效的指数范围内,但 你不检查,如果 row + n
是一个有效的索引。
如果一个数组的长度是8,那么试图访问索引8将总是越界,因为0是第一个元素。这意味着索引7实际上是第8个元素。