指数出界--我不明白为什么?

问题描述 投票:-1回答:1

我必须为类写一个程序来测试一个2D-Array,也就是 "8个皇后问题"。我们要做的就是编写代码来测试一个给定的2D-Array是否对所有8个皇后都有有效的定位,也就是说。

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


java arrays multidimensional-array indexing n-queens
1个回答
1
投票

你的代码看起来很复杂。英文和德文变量之间的混合让人困惑。 columns = Spalten, gitter = grid

总之... 我想问题出在 gitter[row + n][column + n]. 你检查一下 column+n 在有效的指数范围内,但 你不检查,如果 row + n 是一个有效的索引。


3
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.