1

InsertFront()メソッドでオブジェクトを追加しようとすると、NullPointerExceptionが発生します。 DLISTコードは次のとおりです。ただし、このエラーは、もはや、すぐに私はこれにDLISTコンストラクタを変更として表示二重リンクリストの実装でNullPointerExceptionが発生する

public class DList { 
protected DListNode head; 
    protected int size; 

protected DListNode newNode(Object item, DListNode prev, DListNode next) { 
    return new DListNode(item, prev, next); 
    } 

public DList() { 
    head=newNode(null,head,head); 
    size=0; 
    } 


public void insertFront(Object item) { 
    head.next.prev=newNode(item, head, head.next); 
    head.next=head.next.prev; 
    size++; 
} 

:今

public DList() { 
     head=newNode(null,head,head); 
     head.prev=head; 
     head.next=head; 
     size=0; 
     } 

、私はhead.nextを割り当てることを理解していないん& head.prevの値は問題を解決しました。

head=newNode(null,head,head); 

説明してください:しかし、私はすでに、コンストラクタの第一行の前と次のノードとして「頭」変数に割り当てたときに別々にこのことを知らせるために必要だったか理解していません。

head=newNode(null,head,head); 

headが最初nullあるため、コールが本当にこのようなものであること:

head=newNode(null,null /*prev*/, null /*next*/); 

初期コンストラクタでは、これはあなたがそれが何を考えて

答えて

1

を行うことはできませんinsertFrontではhead.next.prevを参照しようとしましたが、head.nextnullだったので例外があります。

古いコンストラクタを考えるための別の方法は、2行にそれを分解することである。

DListNode temp=newNode(null,head,head); // remember that head is null here 
head=temp; 

メソッドの引数は変数の代入の前に評価されています。

関連する問題