0

这对我来说是一个错误。我认为这在语法上是正确的。我没有java经验。只有 C++。有人可以告诉我我做错了什么吗?

private enum Site{
    OPEN, BLOCKED }
Site[][] grid;

final Site DEFAULT_STATE = Site.OPEN;
/**
 * Constructor.
 */
public GridClass(int N)
{
    for(int i = 0; i < N; i++)
    {
        for(int j = 0; j < N; i++)
        {
            grid[i][j] = DEFAULT_STATE;
        }
    }
}
4

3 回答 3

3

你只是在声明grid,你没有定义它。

你需要类似的东西:

Site[][] grid = new Site[N][N];
于 2012-08-25T22:38:09.250 回答
2

问题是您在grid尚未为其分配内存的情况下进行访问。

将此添加为构造函数中的第一行:

grid = new Site[N][N];

您收到的错误称为 a NullPointerException,因为该grid[i][j]行试图取消引用空指针grid.


此外,您的第二个 for 循环说i++; 它应该是j++

于 2012-08-25T22:39:28.953 回答
0

您需要在构造函数中创建数组,因为这是您知道维度的地方。这不能在静态初始化程序中完成,因为此时 N 不在范围内。

public GridClass(int N) {
   grid = new Site[N][N];
   for (int i=0;i<N;i++) {
      Arrays.fill(grid[i], DEFAULT_STATE);
   }
}
于 2012-08-26T02:25:40.677 回答