索引超出范围-我不明白为什么

时间:2020-05-25 22:53:26

标签: java arrays multidimensional-array indexing n-queens

我必须为课堂编写一个程序来测试2D阵列,这是“ 8皇后问题”。我们要做的就是编写代码以测试给定的2D数组对所有八个皇后都有有效定位的天气,

  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++;
                        }
                    }
                }
            }
}


2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

您的代码看起来很复杂。英文和德文变量之间的混淆令人困惑。列= Spalten,抖动=网格

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