如何在java中定义枚举二维数组?

如何在java中定义枚举二维数组?,java,Java,这给了我一个错误。我认为这在语法上是正确的。我没有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(

这给了我一个错误。我认为这在语法上是正确的。我没有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;
        }
    }
}
私有枚举站点{
打开,阻止}
站点[][]网格;
最终站点默认状态=Site.OPEN;
/**
*构造器。
*/
公共网格类(int N)
{
对于(int i=0;i
您只是在声明网格,而不是定义网格

您将需要以下内容:

Site[][] grid = new Site[N][N];

您只是声明
网格
,而不是定义它

您将需要以下内容:

Site[][] grid = new Site[N][N];

问题是您正在访问
网格
,但尚未为其分配内存

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

grid = new Site[N][N];
您收到的错误称为
NullPointerException
,因为
grid[i][j]
行正在尝试取消对
grid
中的空指针的引用



此外,第二个for循环表示
i++
;应该是
j++

问题是您正在访问
网格
,但尚未为其分配内存

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

grid = new Site[N][N];
您收到的错误称为
NullPointerException
,因为
grid[i][j]
行正在尝试取消对
grid
中的空指针的引用



此外,第二个for循环表示
i++
;它应该是
j++

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

public GridClass(int N) {
   grid = new Site[N][N];
   for (int i=0;i<N;i++) {
      Arrays.fill(grid[i], DEFAULT_STATE);
   }
}
公共网格类(int N){
网格=新站点[N][N];

对于(int i=0;i您需要在构造函数中创建数组,因为这是您知道维度的地方。这不能在静态初始值设定项中完成,因为此时N不在范围内

public GridClass(int N) {
   grid = new Site[N][N];
   for (int i=0;i<N;i++) {
      Arrays.fill(grid[i], DEFAULT_STATE);
   }
}
公共网格类(int N){
网格=新站点[N][N];

对于(int i=0;在第二个循环中,它应该是“i++”而不是“j++”吗?我假设您在某个地方有一个main方法(
publicstaticvoidmain(String[]args)
)它是j++(我认为编辑错误很抱歉),我有main方法。我把代码贴在了我遇到问题的地方。从现在开始,我会尽量弄清楚。旁注:避免第二次查看,并使用Arrays.fill()方法作为第二个数组维度:Arrays.fill(grid[I],默认_状态)在第二个循环中,它应该是“I++”而不是“j++”?我假设你在某处有一个main方法?(
publicstaticvoidmain(String[]args)
)它是j++(很抱歉,我想是编辑错误),我有main方法。我把代码贴在了我遇到问题的地方。从现在开始,我会尽量弄清楚。旁注:避免第二次查看,对第二个数组维度使用Arrays.fill()方法:Arrays.fill(grid[i],默认状态)方法之外的代码?它是有效的,不是吗?方法之外的代码在哪里?假设这些都在一个类中,那么这些都是有效的(for
循环在构造函数中)@ZoveGames此代码在方法之外是有效的。它将声明一个字段
grid
,并对其进行初始化。但是,目的是将其放入构造函数中。@ZoveGames:方法之外的代码无效。但是,您可以将其括在大括号
{}
中以创建匿名方法(甚至使用
静态{}
创建一个静态匿名方法)。如果这是你的意思,那么所有这些代码都包装在一个类中。方法之外的代码?它是有效的,不是吗?方法之外的代码在哪里?假设这些都在一个类中,这都是有效的(
for
循环在构造函数中)@ZoveGames此代码在方法之外是有效的。它将声明一个字段
grid
,并对其进行初始化。但是,目的是将其放入构造函数中。@ZoveGames:方法之外的代码无效。但是,您可以将其括在大括号
{}
中以创建匿名方法(甚至使用
静态{}
创建一个静态匿名方法)。如果这是您的意思,那么所有这些代码都包装在一个类中。