0

私は次のコードを持っています:

public class GameCanvas extends JPanel {

private GridField[][] grid;
private int x, y;
private int fieldSize;

public GameCanvas(int rows, int cols, int fieldSize)
{
    this.grid = new GridField[cols][rows];
    this.x = cols;
    this.y = rows;
    this.fieldSize = fieldSize;
}

...
}

GridFieldクラスの定義は次のとおりです。

public class GridField {

private FieldType fieldType;    

public GridField() {
    fieldType = FieldType.EMPTY;
}

public FieldType getFieldType() {
    return fieldType;
}

public void setFieldType(FieldType fieldType) {
    this.fieldType = fieldType;
    }
}

問題は、「グリッド」オブジェクトにアクセスしようとすると、クラスのコンストラクターで初期化したにもかかわらず、コンパイラーがnullと表示することです。

私は少しチェックしました:

if(grid[xSize][ySize] == null) {
  System.out.println("Grid[x][y] is null");
}

それは私が期待したものを正確に印刷しました-null。

私はC#のバックグラウンドからJavaに来ているので、何かを逃したかもしれません。些細な間違いだと思いますが、見つかりません。

ヒントを事前に感謝します。

4

2 に答える 2

8
this.grid = new GridField[cols][rows];

上記のコードは、配列を初期化するだけです。また、各配列要素をので初期化する必要がありobjectsますGridField

おそらくこのようなもの:-

for (int i = 0; i < cols; i++) {
    for (int j = 0; j < rows; j++) {
        grid[i][j] = new GridField();
    }
}

私はC#のバックグラウンドからJavaに来ているので、何かを逃したかもしれません。

この初期化の方法は、で違いはありませんC#。したがって、でこのような配列を初期化した場合C#、おそらくそこにも何かを見逃しているでしょう。@JonSkeetからのコメントに注意してください。

于 2012-12-29T17:30:41.670 に答える
1
this.grid = new GridField[cols][rows]; 

これは配列を初期化するだけですが、要素はありません。

配列内の要素がnullを指しています

于 2012-12-29T17:31:41.217 に答える