2016-04-10 6 views
0

もし私がLinkedQueueを持っていれば、現在のオブジェクトの値を次のオブジェクトに設定し、次のオブジェクトの値を次の次のオブジェクトに設定する方法はありますか?最後の要素ですか?Iteratorで現在のオブジェクトの次のオブジェクトへの値のコピー

次のコードはこれで動作しないようです。

LinkedDeque<Example> queue = new LinkedDeque<Example>(); 

Iterator<Example> iterator = queue.iterator(); 
while (iterator.hasNext()) 
{ 
    Example ex = iterator.next(); 
    int x = ex.getX(); 
    int y = ex.getY(); 
    Example exNext = iterator.next(); 
    exNext.set(x); 
    exNext.set(Y); 
} 
+0

ない:

は、あなただけのこのようなwhileループの反復ごとに一度iterator.next()を呼び出しているので、以前の変数を導入してみます。どのように 'LinkedDeque'がこれに依存するのでしょうか。私はそのようなクラスをJDKには見ません。 – Vampire

+1

なぜあなたはこれをやっていますか?それは実行可能ですが、それは奇妙な操作のように思えます。キューやデキューのアイデアに合ったものではありません。あなたのようなものかもしれません*最後の要素を削除し、最初の要素の別のコピーを前面または何かに追加したいだけかもしれません。 – user2357112

+0

は、最初のアイテムを取得し、複製してキューの最初に追加するのと同じことではありませんか? – KDaker

答えて

1

あなたがiterator.next()を呼び出す毎回、イテレータのインデックスがインクリメントされるので、一度にあなたのリストを介して2つのオブジェクトを移動します。イテレータと

LinkedDeque<Example> queue = new LinkedDeque<Example>(); 

Iterator<Example> iterator = queue.iterator(); 
if(iterator.hasNext()) { 
    Example prev = iterator.next(); 

    while (iterator.hasNext()) 
    { 
     int x = prev.getX(); 
     int y = prev.getY(); 
     Example exNext = iterator.next(); 
     exNext.set(x); 
     exNext.set(Y); 
     prev = exNext; 
    } 
} 
+0

次の要素の値を上書きする前に保存することをお勧めします。 – user2357112

+0

まだ動作しません....最初のセグメントだけがヘッドをたどりますが、残りのセグメントはまったく動かない。 – Matt

+0

さて、デバッグしてください。あなた自身のクラスが適切なイテレータを返す限り、ここのコードは良く見えます。 – Vampire

関連する問題