索引越界检查 n-queens 中的对角线路径

Index is out of bounds checking diagonal path in n-queens

我必须为 class 编写程序来测试二维数组。这就是“八皇后问题”。我们所要做的就是编写代码来测试给定的二维数组是否对所有八个皇后都有有效定位,这意味着:

  1. 只有一个皇后。

  2. 每个 只有 一个 女王。

  3. 每条对角线路径只有一个皇后.

我遇到的问题是对角迭代。我收到 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++;
                }
            }
        }
    }
}


如果数组的长度为 8,则尝试访问索引 8 总是越界,因为 0 是第一个元素。这意味着索引 7 实际上是第 8 个元素。

你的代码看起来很复杂。英语和德语变量之间的混合令人困惑。列 = Spalten,gitter = 网格

无论如何...我认为问题出在gitter[row + n][column + n]。你检查是否 column+n 在有效索引范围内,但 你不检查 row + n 是否是有效索引。