Сравнение трех индексов в многомерном массиве в Java, приводящее к исключению за пределами границ - PullRequest
0 голосов
/ 03 ноября 2018

В настоящее время я делаю игру в крестики-нолики с использованием многомерных массивов в java, и я, кажется, тут попал в стену. Я сравниваю три показателя, чтобы узнать, совпадают ли они (чтобы объявить победителя). Я обнаружил, что могу успешно сравнить два без исключений. Однако, если я сравниваю три, исключение вне границ выдается после отображения того, что пользователь выиграл (по горизонтали). Я действительно не уверен в том, что происходит. Массив имеет размер 5 на 5 и имеет тип String, причем все значения изначально имеют значение "". Я довольно неграмотен с этим сайтом, поэтому извините, если вопрос был отформатирован неправильно !! Пожалуйста, дайте мне знать, чтобы я мог улучшить! :) Код:

for (int row = 0; row < testArray.length; row++)
        {
            for (int column = 0; column < testArray[row].length; column++)
            {
                if ((testArray[row][column].equals("x")) && (testArray[row][column + 2].equals("x")) && (testArray[row][column + 4].equals("x")))
                    System.out.println("You win!");

                if (!(column % 2 == 0))
                    testArray[row][column] = "|";

                else if (!(row % 2 == 0))
                    testArray[row][column] = "-";

                System.out.print(testArray[row][column]);
            }
            System.out.println("");
        }

Большое спасибо заранее!

Редактировать: Для справки я набираю row = 0, column = 0. Затем r = 0 col = 0 устанавливается в x. Происходит итерация, r = 0, col = 2 устанавливается в x, а затем снова запрашивается. Когда я получаю к r = 0, col = 4, когда происходит исключение.

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Ошибка в этой строке:

if ((testArray[row][column].equals("x")) && (testArray[row][column + 2].equals("x")) && (testArray[row][column + 4].equals("x")))

Причина, по которой эта строка вызывает исключение за пределами допустимого диапазона, заключается в том, что массив, соответствующий testArray[row][column + 2], может не существовать.

Рассмотрим случай, когда цикл for, который перебирает столбец, достигает

column = testArray[row][length-1]

Это означает, что столбец + 2 = (длина - 1) + 2 = длина + 1.

Точно такая же ошибка возникает для testArray[row][column + 4]

Надеюсь, это прояснит ситуацию.

0 голосов
/ 03 ноября 2018

В этой строке вы не можете использовать:

((testArray[row][column].equals("x"))  
   &&(testArray[row][column + 2].equals("x")) 
   && (testArray[row][column + 4].equals("x"))

Для столбцов больше 3 будет выброшено IndexOutOfBoundException. Таким образом, вы должны иметь эти 2 и 4 в качестве переменных и корректировать в соответствии с циклом for.

...