2013-03-26 4 views
0

Итак, добавление материала в мой связанный список вызывает NullPointerException, и я не могу, на всю жизнь, выяснить почему. Цель программы - имитировать комод со списком, в котором есть ящики в качестве узлов. Каждый ящик имеет список, который включает в себя предметы быта в качестве узлов.Добавление в пользовательский связанный список вызывает NullPointerException

Вот соответствующие биты кода. Ошибка происходит, когда я создаю: new ChestOfDrawers(3); в моем классе UI:

public class ChestOfDrawers{ 

    private static OwnList chest; 
    private static int[] parametres; 

    public ChestOfDrawers (int drawers){ 
     chest = new OwnList(); 
     create(); 
    } 

    public static void create(){ 
     for (int i = 0; i < parametres.length; i++) { 
      Object drawer = new Drawer(i, parametres[i]); 
      chest.add(i, drawer); //This is causing the error 
     } 
    } 
} 

Drawer класса именуется здесь класс для выдвижных ящиков. Он требует int i в качестве идентификатора и int parametres в качестве емкости ящика. Массив parametres[] заполняется до внесения дополнений в список, и он содержит информацию о емкости ящика. Связанный список в вопросе (OwnList) работает на 100% правильно, поскольку он является частью предоставленного материала курса, он почти идентичен Java. Я тестировал класс в другом тестовом классе, и он работал нормально, я где-то ошибся. Пожалуйста помоги!

+2

Почему вы используете здесь членов 'static'? –

+0

Чтобы иметь возможность ссылаться на них из статического контекста, это не имеет значения, однако – user2213230

+0

Возможно нет. Но маловероятно, что этот код имеет смысл; каждый раз, когда вы создаете новый объект, вы будете перезаписывать статические ссылки. –

ответ

4

Проблема в том, что вы не инициализируете массив параметров. По умолчанию это поле будет null. Вам нужно либо инициализировать его там, где он объявлен, либо в статическом блоке инициализации. Кроме того, почему два поля и метод создания статические? Те, конечно, кажется, как состояние экземпляра ...

Вот лучший вариант:

public final class ChestOfDrawers{ 
    private final OwnList chest = new OwnList(); 
    private final int[] parametres; 

public ChestOfDrawers (int drawers){ 
    if (drawers < 0) throw new IllegalArgumentException("Drawers may not be negative"); 
    chest = new OwnList(); 
    parametres = new int[drawers]; // <-- I'm assuming that's the intended meaning 
    initialize(); 
}   

private void initialize(){ 
    for(int i = 0; i < parametres.length; i++){ 
     Object drawer = new Drawer(i, parametres[i]); // <-- parametres[i] will always be 0 
     chest.add(i, drawer); 
    } 
} 
} 

Я не уверен, что вам нужно массив параметров на самом деле содержат (новый массив междунар будет заполнен нулями значения), но я оставлю это как упражнение для читателя :-)

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