3

これは に関する質問NullPointerExceptionです。私がやろうとしていることは、「ピース」配列のすべてのピースにシンボルを設定することです (メソッドsetSymbolは存在し、char値です)。これはデフォルトで null であることはわかっていますが、どのように設定すればよいですか?私の「設定方法」が機能しない場合、私の配列は?

私は自分のコードをできるだけ簡潔にしています

    Pieces[][] pzs = new Pieces[7][7];
    int i, j;

    for(i=0;i<8;i++){
        for(j=0;j<8;j++){
            pzs[i][j].setSymbol('X')
        }
    }

私はこの例外を受け取ります:

スレッド「メイン」での例外 java.lang.NullPointerException

4

2 に答える 2

6

Pieces[][] pzs = new Pieces[7][7]null で埋められた 7 行 7 列の配列を作成します。

{{null,null,null,null,null,null,null},
 {null,null,null,null,null,null,null},
 {null,null,null,null,null,null,null},
 {null,null,null,null,null,null,null},
 {null,null,null,null,null,null,null},
 {null,null,null,null,null,null,null},
 {null,null,null,null,null,null,null}}

あなたがしたいことはこれです:

Pieces[][] pzs = new Pieces[7][7];
//no need for int i, j
for(int i = 0; i < pzs.length; i++){     //pzs.length guarantees you won't get an 
    for(int j = 0; j < pzs[i].length; j++){ //ArrayIndexOutOfBoundsException even if pzs is something different
        pzs[i][j] = new Pieces();
        pzs[i][j].setSymbol('X')
    }
}

編集:使用を提案してくれたVulpixに感謝pzs.length

于 2013-04-15T23:13:59.180 に答える
2

それぞれを初期化する必要がありますPieces。内側のforループ内に次の行を追加します。

pzs[i][j] = new Pieces();

また、配列が境界を超えて実行され、さらに宣言するPiecesか、両方のループの 1 つの反復をカットしforます。

于 2013-04-15T23:12:44.127 に答える