2017-03-01 12 views
-1

リンクリストにソート乱数を最小から最大に挿入しようとしています。このメソッドを実行するたびにソートと印刷が開始されますが、最終的にはnullpointerexceptionが返されます。どんな助けもありがとうございます。リンクリストを挿入しようとしています

public void insertInOrder(int x) { 
    if (head == null) { 

     head = new Node(x); 

    } else { 
     Node prev; 
     Node curr; 

     for (prev = null, curr = head; 
      (curr != null) && (x > curr.getNumber()); 
      prev = curr, curr = curr.getNext()) {} 

     if (prev == null) { 
      insertAtHead(x); 
     } 

     if (curr == null) { 
      insertAtTail(x); 
     } else { 
      Node nNex = new Node(x); 
      nNex.setNext(curr); 
      prev.setNext(nNex); // NullPointerException is raised here 
     } 
    } 
} 
+0

どこNullPointerExceptionが発生しますか? – gus27

+0

at prev.setNext(nNex); – Brendon

+0

'prev == null'をチェックした後、' prev'変数はもはや更新/変更されません。したがって、 'prev.setNext()'ではNullPointerExceptionが発生することは避けられないようです。 – gus27

答えて

0

あなたがもしそうでない、場合の対処、そして代わりに、二重のelse文、他の場合とすべきである:

これは、あなたが前がnullの場合は、チェック

if (prev == null) { 
    insertAtHead(x); 
} 

if (curr == null) { 
    insertAtTail(x); 
} else { 
    Node nNex = new Node(x); 
    nNex.setNext(curr); 
    prev.setNext(nNex); 
} 

を持っているものですそれが最初のif文に含まれている場合、currがnullの場合、else文を入力するとprevはまだnullです。あなたはする必要があります:

if (prev == null) { 
    insertAtHead(x); 
} 

else if (curr == null) { 
    insertAtTail(x); 
} else { 
    Node nNex = new Node(x); 
    nNex.setNext(curr); 
    prev.setNext(nNex); 
} 
+0

ご協力ありがとうございます!それは完璧に働いた。 – Brendon

+0

うれしかったよ!答えを問題の正解とする – Ricardo

関連する問題