0

我正在尝试使用二维数组将棋盘打印到控制台。出于测试目的,我试图简单地将板填充为“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();
    }
4

1 回答 1

3

嗯,大概是因为你没有正确创建董事会。不幸的是,您没有向我们展示数组创建语句。它应该是这样的:

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后才调用。如果您只是将调用移至内部循环之后,就可以了: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语句等的大括号,则此类事情会更清楚。

于 2011-02-22T19:38:32.003 回答