如何在构造函数中初始化对象数组?

How to initialize an array of objects within a constructor?

我正在制作战舰游戏。到目前为止,我已经实现了 Location class 和 Grid class(Locations 构造函数没有参数,但它的所有实例变量都有默认值)。网格 class 有一个实例变量,它是一个二维位置数组,例如:

private Location[][] grid;

我想要做的是为网格 class 创建一个构造函数,它将创建一个网格(位置对象的二维数组)并初始化每个位置。

这是我目前所做的:

public Grid()
{
    Location[][] grid = new Location[10][10];
    for(int i = 0; i < 10; i++)
    {
        for(int j = 0; j < 10; j++)
        {
            grid[i][j] = new Location();
        }
    }
}

但是当我使用一种方法获取网格内的位置并尝试将其打印出来时。

public Location getLocation(int row, int col)
{
    return grid[row][col];
}

并尝试在课程的“测试器”中使用它(并且我已经为 Location 对象实现了 toString() 方法)

Grid board = new Grid();
        
System.out.println(board.getLocation(0,0));

我收到错误:

Exception in thread "main" java.lang.NullPointerException
    at Grid.getLocation(Grid.java:24)
    at GridTester.run(GridTester.java:9)
    at ConsoleProgram.main(ConsoleProgram.java:21)

有没有一种方法可以在构造函数中正确初始化二维数组中的每个对象?

您的实例变量和局部变量(在构造函数中)同名。每当您调用构造函数时,构造函数中的 grid 变量都会隐藏实例变量。删除构造函数中的类型声明,即 Location[][]

private Location[][] grid;

    
public Grid()
{
    grid = new Location[10][10];
    for(int i = 0; i < 10; i++)
    {  .....