Java的;具有用户定义长度的新创建数组上的空指针

时间:2012-11-25 16:32:50

标签: java

所以,在公共类声明之后,我已经声明了一个数组如下:

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循环来填充数组,也会得到相同的结果。乍一看,我认为这与它被初始化为方法本身之外的公共数组有关 - 但我老实说不太确定。任何人都可以帮忙吗?

4 个答案:

答案 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];