0

2D 配列を使用して、チェス盤をコンソールに出力しようとしています。テスト目的で、ボードに「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';

すべてが順調に進んでいるように見えますが、なぜこれが機能しないのかわかりません。

編集:配列にデータを入力しましたが、印刷を正しくフォーマットできません。内容はすべて、「x」文字の 8x8 正方形としてではなく、1 行に印刷されます。これが私が今持っているものです:

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 に答える