0

Javaで両端キューを作成しようとしましたが、新しいノードを追加するとnullpointer例外が発生します。二重リンクリストに使用するヘルパークラスは次のとおりです。

private class Node {
    private Item item;
    private Node next;
    private Node prev;
}

次に、次のようにリストの先頭にノードを追加します。

    public void addFirst(Item item) {
    Node oldfirst = first;
    first = new Node();      
    first.prev = null;
    first.item = item;
    first.next = oldfirst;
    oldfirst.prev = first;        
    N++;
}

回線のNullPointer例外が発生しoldfirst.prev = first;ます。また、コードをコンパイルすると、次の警告が表示されます。

Warning: The field Deque2<Item>.Node.prev is never read locally

私は何を間違っているのでしょうか?

4

2 に答える 2

0

例外は、それoldfirstがnullであることを意味します。そして、それをとして初期化するので、それはnullNode oldfirst = firstであることを意味します。first

于 2012-09-15T21:12:14.473 に答える
0

私の推測では、両端キューが空の場合firstはnullです。次に、に割り当てるとnullになり、アクセスしようとするとfirstNPEが発生します。アクセスの変更:oldFirstoldFirstprev

if (oldFirst != null)
    oldfirst.prev = first;

それを修正する必要があります。

警告は、おそらくprev、dequeでまだ実際に使用していないという理由だけで、設定しているだけです。おもしろい事実:dequeを使用すると、二重にリンクされたリストは必要ないため、prev変数が使用される可能性はほとんどありません。将来的にdequeを使用したキューイングもサポートする場合(との両方をLinkedList実装する方法と同様)、を維持する必要があります。DequeQueueprev

于 2012-09-15T21:19:27.233 に答える