Метод ArrayList.add (), вызывающий исключение NullPointerException - PullRequest
4 голосов
/ 16 февраля 2012

Класс LongInteger вызывает следующую ошибку при запуске:

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
    }
}

Я в растерянности относительно того, что вызывает этоИсключение нулевого указателя.У кого-нибудь есть предложение?

Ответы [ 2 ]

17 голосов
/ 16 февраля 2012

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

private ArrayList<String> storedStrings;

Кому:

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

Когда у вас есть строка:

this.storedStrings.add(0,s);

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

3 голосов
/ 16 февраля 2012

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

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