2015-08-17 7 views
1

У меня есть этот кусок кода, чтобы добавить узел в список ссылок:NullPointer Исключение при попытке добавления узла в LinkedList

public class linkedList1 { 


public class Node{ 
     private int item; 
     private Node next; 

     public Node(){ 
      next = null; 
     } 
     public Node(int value, Node _n){ 
      this.item = value; 
      next = _n; 

     } 

     public Node getNextNode(){ 
      return next; 
     } 

     public void setNextNode(Node v){ 
      next = v; 
     } 
    } 

    private static Node head; 

    public linkedList1(){ 
     head = null; 
    } 
    public linkedList1(Node head){ 
     this.head = head; 
    } 
    public void setLinkedList(Node n){ 
    } 
    public void addLast(Node n){ 

     Node currentLast = head; 
     Node node; 
      while((node = currentLast.getNextNode()) != null){ 
      currentLast = node; 
     } 
     currentLast.setNextNode(n); 
     System.out.println("ADDED"); 
     } 

    public void travers(){ 
    Node currentLast = head; 
     while(currentLast.getNextNode() != null){ 
      System.out.println(currentLast); 
      currentLast=currentLast.getNextNode(); 
     } 
    } 

мой основной метод выполняет следующие действия (Имейте в виду, я не слишком уверен, что я инициализация связанного списка хорошо):

public static void main(String[] args){ 
    linkedList1 newLinkedList = new linkedList1(head); 
    Node second = newLinkedList.new Node(6,null); 
    Node head = newLinkedList.new Node(5, second); 
    Node third = newLinkedList.new Node(8, null); 
    newLinkedList.addLast(third); 


    } 

Его метания мне эту ошибки: исключение в потоке «основной» java.lang.NullPointerException -> происходит в addLast, а затем в моем методе на while(). Любая помощь в выяснении, почему?

+1

Как выглядит ваш класс «Узел»? Как выглядит ваш класс 'linkedList1'? Какова полная трассировка стека исключения? Похоже, вы пытаетесь использовать 'head' еще до его объявления. Скомпилирован ли ваш основной метод? – Jeffrey

+0

Я не сказал, потому что в прошлый раз мне сказали включить только фрагменты, которые я сделал. Я его отредактировал. –

+1

Btw людям не нужно обсуждать вопросы, которые делают люди, пытающиеся учиться. Это просто мешает другим публиковать свой вопрос, на который они полностью ТРИД, чтобы найти ответ. Очень грустно видеть. –

ответ

-2

Я считаю, проблема в том, что вы дважды вызываете метод getNextNode за один цикл while. Попробуйте сделать что-то подобное.

Node node; 
while ((node=currentLast.getNextNode()!=null){ 
     //do stuff with node 
} 

Это помогает, потому что теперь вы называете getNextNode только один раз, так что вы не столкнетесь с NullPointerExceptions

+0

Изменил это, что вы сказали, все еще дает ошибку. действительно меня озадачило. –

0

Вы не показаны исходный код целиком, и поэтому я просто предполагаю здесь, но ... newLinkedList указывает на экземпляр класса linkedList1. Я полагаю, что в этом классе вы определили переменную memober с именем head. Я предполагаю, что переменная инициализируется null. в методе main вы создаете экземпляры newLinkedList, один из которых присваивается переменной LOCALhead. Эти переменная не такие же, как переменные вы определили в классе, который является тот, который вы имеете в виду в:

Node currentLast = head; 

Следовательно, currentLast является null, что приведет к тому, исключению позже ,

Что вы хотите сделать это: addLast следует сначала проверить, head is null или нет. если это так, он должен назначить переданный узел head, сделав его первым узлом. Если нет, он должен зацикливаться. Не обращайте внимания на другой ответ, ваша петля в порядке.

0

Очевидно, статическая переменная head имеет значение null. Вы повторно инициализируете новый узел head в своем основном методе, измените его на статическую переменную head. Ниже приведено решение

public static void main(String[] args){ 
    linkedList1 newLinkedList = new linkedList1(head); 
    Node second = newLinkedList.new Node(6,null); 
    head = newLinkedList.new Node(5, second); 
    Node third = newLinkedList.new Node(8, null); 
    newLinkedList.addLast(third); 
} 
+0

Лучшее решение - сделать 'head' non-'static'. Во-первых, это не должно быть «статичным». – Jeffrey

+0

Правда, что.В конце концов, это не должно быть статическим. – Vigs

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