2015-01-09 3 views
0

Я пишу класс объекта для подсчета числа каждого письма, и когда я запускаю свой тестовый код, он показывает мне исключение нулевого указателя, когда «abc» передается. , нет ошибки, это тестовый код, но в классе объектов есть некоторая ошибка.Как исправить это конкретное исключение нулевого указателя

public class LetterInventory { 

    private static final int COUNTER = 26; 
    private int size = 0; 
    private int[] inventory; 

    public LetterInventory() { 
    inventory = new int [COUNTER]; 
} 
    public LetterInventory (String data) { 
     data = data.toLowerCase(); 
     for(int i = 0; i < data.length(); i++) { 
     int charPosition = data.charAt(i) - 'a'; 
     if(charPosition >= 0 && charPosition < COUNTER) { 
      inventory[charPosition]++; 
      size++; 
     } 
     } 
    } 
+0

Исправления является одинаковым для всех NPE: выяснить, что нуль и назначить его ненулевую ссылку. Трассировка стека указывает номер строки в файле, который ее создал. Разве это не достаточно хороший намек? – duffymo

+0

Где находится NPE? –

+0

Ну, это не очень умно, чтобы инициализировать 'inventory' в одном конструкторе и использовать его в другом. Вы не можете позвонить обоим, так что либо вы не можете считать что-либо, либо 'inventory' остается' null'. – Tom

ответ

2

Вы не инициализировали массив во втором конструкторе.

public LetterInventory(String data) { 
    inventory = new int[COUNTER]; // <= initialization was missing 
    data = data.toLowerCase(); 
    for (int i = 0; i < data.length(); i++) { 
     int charPosition = data.charAt(i) - 'a'; 
     if (charPosition >= 0 && charPosition < COUNTER) { 
      inventory[charPosition]++; 
      size++; 
     } 
    } 
} 
+0

Вместо того, чтобы инициализировать его в двух местах, вызовите другой конструктор: 'this();'. См. [DRY] (http://en.m.wikipedia.org/wiki/Don%27t_repeat_yourself) – Bohemian

+0

Но как и где я это использую? –

0

Я не имею право комментировать, так вот вы идете:

public LetterInventory(String data) { 
    this(); 
    //inventory = new int[COUNTER]; // <= initialization was missing 

    data = data.toLowerCase(); 
    for (int i = 0; i < data.length(); i++) { 
     int charPosition = data.charAt(i) - 'a'; 
     if (charPosition >= 0 && charPosition < COUNTER) { 
     inventory[charPosition]++; 
     size++; 
    } 
} 
Смежные вопросы