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;
    }
}

问题是,当我尝试访问“网格”对象时,编译器说它为空,尽管我已经在类的构造函数中对其进行了初始化。

我做了一点检查:

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];

上面的代码只初始化了数组。您还需要使用objectsof初始化每个数组元素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 回答