所以,在公共类声明之后,我已经声明了一个数组如下:
public String[] accept;
从这里开始,我希望获取用户输入以查看此数组应该有多长 - 然后,我们将进入一个循环以使用字符串填充数组。我将以下内容放入方法中;
if (scanner.hasNextInt()) {
wcount = scanner.nextInt();
//create the array.
String accept[] = new String[wcount];
}
System.out.println(accept.length);
但不幸的是,没有好的。 Java返回;
Exception in thread "main" java.lang.NullPointerException
显然,尝试直接进入for循环来填充数组,也会得到相同的结果。乍一看,我认为这与它被初始化为方法本身之外的公共数组有关 - 但我老实说不太确定。任何人都可以帮忙吗?
答案 0 :(得分:4)
您在if块中声明了一个新数组,它隐藏了您之前声明的数组。当块退出时,变量超出范围,并且您获得NPE尝试访问(未更改的)实例变量。将代码更改为实际初始化实例变量,如下所示:
if (scanner.hasNextInt()) {
wcount = scanner.nextInt();
//create the array.
accept = new String[wcount];
}
System.out.println(accept.length);
答案 1 :(得分:1)
您正在重新创建一个新的accept []
作为本地变量。改变你的循环如下
if (scanner.hasNextInt()) {
wcount = scanner.nextInt();
//create the array.
accept = new String[wcount];
}
答案 2 :(得分:0)
在String accept[]
语句中将accept
更改为if
,您将在该范围内重新声明新的null
,而保留原来的{{1}}。
答案 3 :(得分:0)
String accept[] = new String[wcount];
声明一个变量,并将对新字符串数组的引用存储到其中。
您可能希望使用先前声明的变量。要做到这一点,只需直接使用赋值表达式:
accept = new String[wcount];