为什么我的数组会出现NullPointerException错误?

时间:2011-11-21 08:02:54

标签: java arrays nullpointerexception

我的程序运行。它只是在程序中间说:

Exception in thread "main" java.lang.NullPointerException
at Example.main(Example.java:33)

这是我的代码:

String [] iArray ;
String i ;
int counter=1 ; counteragain=-1, q;

do {
System.out.print ("\n\nItem Code : ") ;
i = s.next();

if (i.equals ("0") ){
  counter = 0 ;
} else {
  System.out.print ("\nQuantity: ") ;
q = s.nextInt() ;
counteragain++ ;

i = iArray[counteragain];
}
} while (counter!=0) ;

我收到错误的行是:

 i = iArray[counteragain];

为什么会出现此错误?我的语法错了吗?但那为什么它会运行我的程序?

非常感谢任何帮助。

6 个答案:

答案 0 :(得分:4)

您没有初始化此阵列。因此它具有 null 值。 你必须做这样的事情

String[] iArray = new String[numberOfElements];

需要在声明中初始化数组。因此,您可以先重新收集此 numberOfElements ,然后对其进行初始化。

iArray = new String[numberOfElements];

答案 1 :(得分:2)

String [] iArray ;永远不会被实例化。因此,最初,iArray为空。

当您获得元素i = iArray[counteragain];时,您正在尝试访问未实例化的数组,因此会抛出NullPointerException

我不知道你的数组大小是多少,但要取消它的无效,你必须这样做:

String[] iArray = new String[size];

现在,iArray将有一个长度为size的占位符,但每个元素都将为null,因为它尚未分配值。即,iArray[0]将为null,因为元素0没有值。

答案 2 :(得分:0)

iArray永远不会被初始化。所以解除引用的iArray[counteragain]使用空引用来实现;因此NullPointerException

答案 3 :(得分:0)

你需要分配数组。 第String [] iArray行;只声明了对类型字符串数组的引用,但没有 为阵列中的对象分配任何空间; 你需要将这一行改为

String[] iArray = new String[size of needed array];

如果你无法预测所需的大小,最好使用像ArrayList这样的集合类型

答案 4 :(得分:0)

你的代码不完整,它没有显示s是什么(我猜它是一个迭代器)以及它来自哪里。 从您发布的代码中,异常是

的结果
String [] iArray;

你没有初始化iArray所以它是null;你应该发布一个工作方法/类,以获得正确的答案。

答案 5 :(得分:0)

iArray = new String[n];,其中niArray中元素的数量。

应该帮助你摆脱NullPointerException ..