ArrayIndexOutOfBoundsException - почему у меня все еще есть эта проблема? - PullRequest
0 голосов
/ 22 февраля 2011

Я пытаюсь распечатать шахматную доску на консоли, используя двумерный массив.В целях тестирования я пытаюсь просто заполнить доску как 'x' символы.Тем не менее, я продолжаю получать исключение ArrayIndexOutOfBounds, когда я пытаюсь заполнить массив следующим:

public void setupBoard(){
        for (int i=0; i < height; i++){
            for (int j=0; j < width; j++){
                boardArray[i][j] = 'x';
            }
        }
    }

Ошибка, по-видимому, возникает в boardArray[i][j] = 'x';

Кажется, все в порядке, яНе понимаю, почему это не работает.

РЕДАКТИРОВАТЬ: я получил массив для заполнения, но теперь я не могу правильно отформатировать печать.Все содержимое печатается в одной строке, а не как квадрат 8x8 символов 'x'.Вот что у меня сейчас:

public void displayBoard(){
        for (int k=0; k < boardArray.length; k++)
               for (int l=0; l < boardArray[k].length; l++){
                   System.out.print(boardArray[k][l]);
               }
        System.out.println();
    }

1 Ответ

3 голосов
/ 22 февраля 2011

Ну, вероятно, это потому, что вы не создали доску должным образом.К сожалению, вы не показали нам оператор создания массива.Это должно быть примерно таким:

char[][] boardArray = new char[height][width];

РЕДАКТИРОВАТЬ: Хорошо, теперь для печатной части.Ваш текущий код:

public void displayBoard(){
    for (int k=0; k < boardArray.length; k++)
           for (int l=0; l < boardArray[k].length; l++){
               System.out.print(boardArray[k][l]);
           }
    System.out.println();
}

Это эквивалентно:

public void displayBoard() {
    for (int k = 0; k < boardArray.length; k++) {
        for (int l = 0; l < boardArray[k].length; l++) {
            System.out.print(boardArray[k][l]);
        }
    }
    System.out.println();
}

... поэтому вы звоните println только после external loopзакончилЕсли вы просто перенесете вызов на println на после внутреннего цикла , все будет хорошо:

public void displayBoard() {
    for (int k = 0; k < boardArray.length; k++) {
        for (int l = 0; l < boardArray[k].length; l++) {
            System.out.print(boardArray[k][l]);
        }
        System.out.println();
    }
}

Обратите внимание, что подобные вещи понятнее, если вы всегда включает скобки для циклов, if операторов и т. д.

...