for循环将数组元素实例化为一个对象,但我还是必须手动实例化?

Jac*_*son 1 java arrays loops

所以我有一个数组:

Cell[][] grid = new Cell[5][20];

for (int i = 0; i < grid.length; i++){
    for(int j = 0; j < grid[i].length; j++)
    {
        grid[i][j] = new Cell();
    }
}           
Run Code Online (Sandbox Code Playgroud)

因此,根据我的理解,数组的每个元素都将被制作成一个新的Cell对象.这就是我想要的,但是当我尝试访问特定的元素/单元格时,我得到一个NULL指针错误.

grid[0][1].cellState = 5;    //THIS MAKES AN ERROR!! //
Run Code Online (Sandbox Code Playgroud)

为了使它工作,我必须手动实例化它:

grid[0][1] = new Cell();
grid[0][1].cellState = 5;
Run Code Online (Sandbox Code Playgroud)

我只是不明白,是不是for循环为我做这个?在某个点循环之后,ij将在某一点等于0 1,所以这与做0,1 =新Cell()的基本相同

谢谢你的帮助,我是编程新手.

编辑:

我已经弄清楚了,我是个白痴,说实话,这只是一个让我困扰了好几个小时的愚蠢错误.我试图在for循环中设置单元格状态(因为我只是在测试).因此grid [0] [1] .cellState = 5会在第一个循环上抛出错误,因为它尚未创建.对不起,我没有使用我的大脑,谢谢你们的帮助.

dav*_*xxx 5

您为2D阵列的每个索引对创建一个Cell对象.
因此,您的代码似乎可以完成工作,但您不会显示所有已执行的代码.所以问题可能在另一个地方.

使用Cell类:

public class Cell {    
    public int cellState;    
}
Run Code Online (Sandbox Code Playgroud)

和一个TestClass

public static void main(String[] args) {
    Cell[][] grid = new Cell[5][20];

    for (int i = 0; i < grid.length; i++) {
        for (int j = 0; j < grid[i].length; j++) {

            grid[i][j] = new Cell();
        }
    }

    grid[0][1].cellState = 5; 
    System.out.println(grid[0][1].cellState);
}
Run Code Online (Sandbox Code Playgroud)

当我执行此代码时,我得到以下输出: