gpt4 book ai didi

Java - 初始化数组后和使用类方法测试数组时出现 NullPointerException

转载 作者:搜寻专家 更新时间:2023-10-31 19:33:20 28 4
gpt4 key购买 nike

我一直在尝试初始化一个数组,然后使用类方法测试它的值。我已经初始化了数组,并且已经在构造函数中成功地测试了它,所以它看起来像数组被填充了,但是当我尝试在 Main 方法中测试它时,它就会抛出 NullPointer 异常。

class PercolGrid {
int sides;
boolean[] grid;

public PercolGrid (int inSides) {
sides = inSides;
//grid = new boolean[] {false,false,false,false,false,
//false,false,false,false,false};
boolean[] grid = new boolean[sides];
for (int i = 0; i < sides; i++) {
grid[i] = false;
System.out.println("Setting " + i + " to " + grid[i]);
}
System.out.println("Checking outside FOR loop, first square is: " + grid[0]);
}


public boolean testSqr (int i) {
System.out.println("Requested index is: " + i);
return grid[i];
}

public static void main(String[] args){
PercolGrid firstGrid = new PercolGrid(10);
System.out.println("Grid created! Checking index ....");
System.out.println("First square is :" + firstGrid.testSqr(0)); // NullPointerException
System.out.println("First square is :" + firstGrid.grid[0]); // and here
}
}

这几乎就像引用的数据存在于构造函数中,但不存在于构造函数之外。当我注释掉 for 循环和它上面的 boolean[] .... 行,并取消注释我的 grid = new boolean[] .... 行,一切正常,但我想在实例化对象时选择边数。

编辑 - 如果我注释掉第 19 行 (firstGrid.testSqr(0)) 而运行第 20 行 (firstGrid.grid[0]),则会发生同样的错误.

这是在尝试使用二维数组之前使用一维数组的练习。我错过了什么?

我的输出看起来像这样:

Setting 0 to false
...
Setting 9 to false
Checking outside FOR loop, first square is: false
Grid created! Checking index ....
Requested index is: 0
java.lang.NullPointerException
at PercolGrid.testSqr(PercolGrid.java:19)
at PercolGrid.main(PercolGrid.java:25)

最佳答案

你的问题出在这一行:

boolean[] grid = new boolean[sides];

这是初始化局部变量网格,而不是实例中的字段。

将其更改为:

grid = new boolean[sides];

这会初始化实例中的字段。

通过将类型放在前面,您声明了一个新变量。当您在方法中声明变量时,其范围仅限于该方法。由于您的局部变量与您的实例变量同名,因此它“隐藏”了实例变量。

关于Java - 初始化数组后和使用类方法测试数组时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23185162/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com