Индекс выходит за рамки - я не понимаю, почему - PullRequest
0 голосов
/ 26 мая 2020

Мне нужно написать программу для класса, чтобы протестировать 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 ]

3 голосов
/ 26 мая 2020

Если массив имеет длину 8, попытка доступа к индексу 8 всегда будет выходить за пределы, потому что 0 является первым элементом. Это означает, что индекс 7 на самом деле является 8-м элементом.

1 голос
/ 26 мая 2020

ваш код выглядит сложным. Смешивание английских sh и немецких переменных сбивает с толку. columns = Spalten, gitter = grid

В любом случае ... Я предполагаю, что проблема в gitter[row + n][column + n]. Вы проверяете, находится ли column+n в допустимом диапазоне индекса, но вы не проверяете, является ли row + n допустимым индексом.

...