我有以下代码:
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;
}
}
问题是,当我尝试访问“网格”对象时,编译器说它为空,尽管我已经在类的构造函数中初始化它。
我做了一点检查:
if(grid[xSize][ySize] == null) {
System.out.println("Grid[x][y] is null");
}
它打印出了我所期望的 - null。
我是从C#背景来到Java,所以我可能错过了一些东西。我相信,这是一个微不足道的错误,但我找不到它。
提前致谢,任何提示。
答案 0 :(得分:8)
this.grid = new GridField[cols][rows];
以上代码仅初始化数组。您还需要使用objects
的{{1}}初始化每个数组元素。
可能是这样的: -
GridField
我是从C#背景来到Java,所以我可能错过了 东西。
这种初始化方式在for (int i = 0; i < cols; i++) {
for (int j = 0; j < rows; j++) {
grid[i][j] = new GridField();
}
}
中没有区别。所以,如果你在C#
中初始化这样的数组,那么你可能也错过了一些东西。请注意@JonSkeet的评论。
答案 1 :(得分:1)
this.grid = new GridField[cols][rows];
这只是初始化数组但你没有元素。
数组中的元素指向null