Alex Arteni Ответов: 1

Java lang arrayindexoutofbounds


Я все еще пытаюсь разобраться в 2d-массивах и столкнулся с проблемой, которую, похоже, не могу найти. это игра с доской, и вы должны перейти от А К Б, чтобы закончить ее. Всякий раз, когда я пытаюсь двигаться вниз, программа выдает исключение ArrayIndexOutOfFounds.

Это мой 2d массив
char[][] gameBoard = {
                {'#','-','#','-','#','-','#','-','#','-','#','-','#','-','#','-','#','-','#'},
                {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#'},
                {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#'},
                {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#'},
                {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#'},
                {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#'},
                {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#'},
                {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#'},
                {'#',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ',' ','#'},
                {'#','-','#','-','#','-','#','-','#','-','#','-','#','-','#','-','#','-','#'},
        };

я просто решил сначала сделать доску, а потом наполнить ее всякой всячиной.
Это заполняющая часть

public static void fillBoard(char[][] gameBoard) {
            Random rand = new Random();
            int rows = gameBoard.length;
            int cols = gameBoard[0].length;
            for(int i = 0; i< rows; i++) {
                for(int j = 0; j< cols; j++){
                    int position = rand.nextInt(3);
                    if(i == 0) {
                        gameBoard[i][j] = '#';
                    }
                    if(j == 0) {
                        gameBoard[i][j] = '#';
                    }
                    if(i == 9) {
                        gameBoard[i][j] = '#';
                    }
                    if(j == 18){
                        gameBoard[i][j] = '#';
                    }
                    if(position == 2 && gameBoard[i][j] == ' ') {
                        gameBoard[i][j] = 'X';
                    }

                }
            }


и это метод перемещения вниз. Я в значительной степени нищий, так что я думаю, что решение находится передо мной, но я не могу его найти :D

public static void moveDown(char[][] gameBoard) {
        int rows = gameBoard.length;
        int cols = gameBoard[0].length;
        for(int i = 1; i< rows; i++) {
            for(int j = 1; j< cols; j++){
                if(gameBoard[i][j] == 'W'){
                    if(gameBoard[i+1][j] != 'X' && gameBoard[i+j][j] != '#'){
                        gameBoard[i][j] = ' ';
                        gameBoard[i+1][j] = 'W';
                    }else System.out.println("Miscare invalida.");
                }
            }
        }
        printBoard(gameBoard);
        }


Что я уже пробовал:

Код такой же, как и в других методах, и работает нормально.

1 Ответов

Рейтинг:
0

Gerry Schmitz

Выглядит подозрительно (i+j).

if(gameBoard[i+1][j] != 'X' && gameBoard[i+j][j] != '#'){


CPallini

5.

Alex Arteni

Я видел, что после создания поста Я заменил его на i+1, и теперь я получаю arrayindexoutofbound на 10-м индексе, который я должен остановить на 9