2012-02-16 103 views
2

类运行时长整型引起以下错误:ArrayList.add()方法导致NullPointerException异常

Exception in thread "main" java.lang.NullPointerException 
at LongInteger.breakString(LongInteger.java:38) 
at LongInteger.<init>(LongInteger.java:17) 
at LongInteger.main(LongInteger.java:149) 

这里有一些相关类摘要:

public class LongInteger extends Object { 
private ArrayList<String> storedStrings;   


    // Constructor 
public LongInteger(String s) { 
    this.setInputString(s); 
    this.breakString(this.inputString);  //Exception @ line 17 
} 

/** 
    * the purpose of this method is to break the input string into an 
    * ArrayList<String> where each String has a length of 9 or less. 
    */ 
private void breakString(String s){   
    if(s.length()>9){ 
     storedStrings.add(0,s.substring(s.length()-9,s.length())); 
     this.breakString(s.substring(0,s.length()-9)); 
    } else { 
     this.storedStrings.add(0,s);  //Exception @ line 38 
    } 
} 


public static void main(String[] args) { 
    LongInteger a = new LongInteger("12345"); //Exception @ line 149 
    } 
} 

我很茫然,以是什么导致这个NullPointerException。任何人都有建议?

+0

“storedStrings”是否已初始化? – 2012-02-16 01:36:30

回答

15

你永远不会实例化storedStrings。尝试改变:

private ArrayList<String> storedStrings; 

要:

private ArrayList<String> storedStrings = new ArrayList<String>(); 

当你有行:

this.storedStrings.add(0,s); 

正在调用的方法add实例ArrayList<String>存储在this.storedStringsnew运算符是您如何获得新事物的实例。

3

您需要在使用它之前创建storedStrings变量。

ArrayList<String> storedStrings = new ArrayList<String>(); 
+0

'storedStrings'已创建,它只是未初始化。 – 2012-02-16 01:42:15

相关问题