2012-03-09 17 views
0

今すぐインデックスでノードを削除しようとしています。インデックス付きのノードのリストを印刷して、ユーザーが見られるようにインデックスを選択できるようにしたいと思います。私は自分の論理がインデックス付きのリストを印刷するのに大丈夫だと思うが、入力が出てこないと思う:(リンクされたリスト内のノードを削除する

私はまだこのリストを印刷することはできませんでしたが、削除したいインデックス」を出力し、ユーザーの選択を取ることができましたが、最終的にNullPointerExceptionを得

  else if (menu.equals("d")) { 
      EntryNode temp = head; 
      while (temp != null) { 
       for (int i = 0; i < addressBook.length(); i++) { 
        //gets node at index 
        System.out.println(temp.getFirstName() + i); 
        temp = temp.getNext(); 
       } 
      System.out.println(" "); 
      System.out.println("Please enter the index of the entry you wish to delete "); 
      int index = keyboard.nextInt(); 
      addressBook.removeEntry(index); 
      } 

     } 

除去方法:。 公共ボイドremoveEntry(int型のインデックス){

//delete from the head 
    if (index == 0) { 
     EntryNode temp = head; 
     head = temp.getNext(); 
     temp.setNext(null); 
     head.setPrev(null); 
     size--; 
    } 
    //delete from the tail 
    else if (index == length()) { 
     EntryNode temp = tail; 
     temp.setPrev(null); 
     tail.setNext(null); 
     tail = temp.getPrev(); 

     size--; 
    } 
    //in the middle 
    else { 
     EntryNode temp = head; 
     for (int i = 0; i < index; i++) { 
      //gets node at index 
      temp = temp.getNext(); 
     } 
     //set node after temp's previous to temp's previous 
     temp.getNext().setPrev(temp.getPrev()); 
     temp.getPrev().setNext(temp.getNext()); 
     temp.setNext(null); 
     temp.setPrev(null); 
     size--; 
    } 
} 

NullPointerExceptionは次のものから発生します。

//set node after temp's previous to temp's previous 
temp.getNext().setPrev(temp.getPrev()); 
+0

else if(index == length()){else if(index == length()-1){'を代わりに使うべきではありませんか? 0からのインデックス作成を開始し、 'length()'が要素の数である場合、テールのインデックスは 'length()'ではなく 'length() - 1'になります。 – biziclop

答えて

2

temp.getNext()nullではないことを確認してから、setPrev()を呼び出してください。

また、ゼロインデックス付けされたノードがあるので、length()-1にチェックする必要があります。

+0

temp.getNext()がnullの場合、tempテールではありませんか? – jackie

+0

はい、ヌルチェックを正しく行うと、頭や尾の特殊なケースを持つ必要はありません。 – biziclop

+0

@JackieAldamaはい。あなたの長さがおそらく正確ではないので(実際には 'actual-length'を返していますか(あなたの条件を変更していますか?または' actual-length-1'ですか? –

1

インデックスが範囲[0, length() - 1]であるので、あなたは代わりに

else if (index == length() - 1) { 

を使用する必要があります。

関連する問題