2016-05-25 8 views
0

JavaのListIteratorの機能をミラーリングしようとしています。私の頭を包み込むのに苦労しているのは、previous()メソッドが正常に動作していることだけです。Javaの組み込み反復子をミラーリングするListIteratorの作成

ここに私のものがあります。

public ListIterator300<Item> listIterator() { 

    return new ListIterator300<Item>() { 

     private Node<Item> n = first; 

      public boolean hasNext() { 
       return n.next != last; 
      } 

      public Item next() { 
       n = n.next; 
       return n.data; 
      } 

      public void remove() { 
      } 

      public boolean hasPrevious() { 
       return n.previous != first; 
      } 

      public Item previous() { 
       n = n.previous; 
       return n.data; 
      } 
     }; 
    } 

だから、私はprevious()next()メソッドを持っているに実行している問題は、その後に呼び出されたときに、同じ番号を返します。今私はListIteratorに組み込まれていることがカーソルを使用することを読んだ。これを私のコードに実装する方法の一般的なヒントはありますか?

例えば

[1 2 3 4]

next() -> 1

previous() -> 1

next() -> 1

next() -> 2

+0

@ジョニデータはnullに初期化されます。役に立つと思ったら残りのコードを投稿することができます – 23k

+0

これは誰かの宿題でなければなりません。私はちょうど1日前にこの同じ質問に答えました:http://stackoverflow.com/questions/37403794/correct-implementation-of-list-iterator-methods/37404073#37404073 –

+0

私の注意を引くために@DanielWiddis表記を使用してください。私は一般的なコメントは通常通知されません。 –

答えて

1

代わりのチェック:

n.next != last; 

チェック:

n != last; 

と同じのために:

n.previous != first; 

に置き換えます

n != first; 

あなたはなぜ参照していますか?

+0

もし私が推測しなければならないのであれば、n.nextとn.previousをチェックすると常に先行するか後ろに1つ置かれますか? – 23k

+0

推測しないでください - それを紙の上に描きます! 'n.next == last'のときは、あなたはまだ" next "を持っています。 'n == last'のときにのみ、「next」はありません。そして前と同じことがそれぞれ前にあります。 – alfasin

関連する問題