0

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

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

4 回答 4

4

您在 if 块中声明了一个新数组,该数组隐藏了您之前声明的数组。当块退出时,变量超出范围,您会得到一个 NPE 试图访问(未更改的)实例变量。更改您的代码以实际初始化您的实例变量,如下所示:

if (scanner.hasNextInt()) {
    wcount = scanner.nextInt();

    //create the array.
    accept = new String[wcount];
}
System.out.println(accept.length);
于 2012-11-25T16:35:47.933 回答
1

您正在重新创建一个新accept []的局部变量。改变你的循环如下

if (scanner.hasNextInt()) {
  wcount = scanner.nextInt();
  //create the array.
  accept = new String[wcount];
}
于 2012-11-25T16:36:05.210 回答
0

更改String accept[]为仅acceptif语句内,您将在该范围内重新声明一个新的,留下旧的null

于 2012-11-25T16:37:38.637 回答
0
String accept[] = new String[wcount];

声明一个变量,并将对新字符串数组的引用存储到其中。

您可能想改用先前声明的变量。为此,只需直接使用赋值表达式:

accept = new String[wcount];
于 2012-11-25T16:41:29.770 回答