2012-02-16 2 views
2

Класс LongInteger вызывает следующую ошибку при запуске:метод 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

Является ли «хранимая строка» когда-либо инициализированной? –

ответ

15

Вы никогда не создаете экземпляр storedStrings. Попробуйте изменить:

private ArrayList<String> storedStrings; 

To:

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

Если у вас есть строка:

this.storedStrings.add(0,s); 

Это вызывающий метод add на например из ArrayList<String> хранится в this.storedStrings. Оператор new - это то, как вы получаете новые экземпляры вещей.

3

Перед использованием необходимо создать переменную storedStrings.

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

'storedStrings' был создан, он просто не был инициализирован. –

Смежные вопросы