2011-11-21 74 views
0

我的程序正在运行。它只是在节目进行到一半时说:为什么我的数组得到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]; 

为什么我得到这个错误?我的语法错了吗?但为什么它运行我的程序?

任何帮助将不胜感激。

+2

iArray尚未分配任何值。 – jerjer

+0

's'是什么?它从未被宣布。 –

回答

2

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

当你得到一个元素i = iArray[counteragain];时,你试图访问一个没有实际意义的数组,因此抛出了一个NullPointerException

我不知道什么是你的数组的大小,而是未废除它,你将要做的:现在

String[] iArray = new String[size]; 

iArray的长度是size的占位符,但每个元素将是null因为它没有被赋值。即iArray[0]将为空,因为在元素0处没有值。

4

您没有初始化此数组。因此它有一个null值。 你必须做这样的事情

String[] iArray = new String[numberOfElements]; 

你做需要初始化在声明数组。所以你可以先回忆这个numberOfElements然后初始化它。

iArray = new String[numberOfElements]; 
0

iArray从不初始化。所以取消引用的iArray[counteragain]用空引用进行处理;因此NullPointerException

0

您需要分配数组。 该行String [] iArray;只声明了对字符串类型数组的引用,但没有为该数组中的对象分配任何空间; 你需要该行更改为类似

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

如果你不能预测所需的大小,它可能是最好使用一个集合类型如ArrayList

0

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

String [] iArray; 

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

0

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

应帮助您摆脱NullPointerException ..