2016-07-07 16 views
1

私はオブジェクトxのツリーセットを持っているとしましょう。私がやろうとしていることは、すべてのオブジェクトを反復してすべてのペアを取得することです。これまでのところ、私はTreeSetの要素の可能なすべてのペアを取得します。

TreeSet<x> ts = new TreeSet<>(); 
ts.add(new x(3, true)); 
ts.add(new x(1, true)); 
ts.add(new x(2, true)); 
ts.add(new x(5, true)); 
ts.add(new x(4, true)); 
Iterator<x> iterator = setOfX.iterator(); 
    while (iterator.hasNext()) { 
     System.out.println("ID:"+iterator.next()); 
     Iterator<x> innerIterator = setOfX.tailSet(iterator.next(), true).iterator(); 
     while (innerIterator.hasNext()) { 
      int id = innerIterator.next().id; 
      System.out.println(id); 
     } 
    } 

以下のコードになってきたが、出力は組み合わせのいくつかの幸運に思える、それに加えて

ID:1:true 
2 
3 
4 
5 
ID:3:true 
4 
5 
ID:5:true 
Exception in thread "main" java.util.NoSuchElementException 

は、あなたが任意の解決に向けて指し示すことができる例外で終了しますか?

+2

あなたは 'TreeMap'と言いますが、あなたのコードは' TreeSet'に関するものです。それはどちらですか、地図ですか? – Jesper

+0

私の間違い!これはTreeSetです!これを修正しました。 – Omen

答えて

2

問題は、iterator.next()を2回呼び出すことです。このメソッドは、イテレータが現在指しているものを取得するだけでなく、イテレータを次の要素に進めることにも注意してください。一度だけ反復ごとiterator.next()を呼び出し、変数にその戻り値を格納します。

TreeSet<x> ts = new TreeSet<>(); 
ts.add(new x(3, true)); 
ts.add(new x(1, true)); 
ts.add(new x(2, true)); 
ts.add(new x(5, true)); 
ts.add(new x(4, true)); 
Iterator<x> iterator = setOfX.iterator(); 
    while (iterator.hasNext()) { 
     // Call iterator.next() only once per iteration 
     x value = iterator.next(); 

     System.out.println("ID:"+value); 
     Iterator<x> innerIterator = setOfX.tailSet(value, true).iterator(); 
     while (innerIterator.hasNext()) { 
      int id = innerIterator.next().id; 
      System.out.println(id); 
     } 
    } 
+0

ありがとうございます。これは私の間違いだった...指摘ありがとう! – Omen

+1

申し訳ありませんが、私の解決策はほぼ同じです。私はゆっくりとタイプするかもしれません。 –

1

あなたはiterator.nextを行っている()2回。 innerIteratorを作成するときに、sysoutの中に1つは他にあります。

System.out.println("ID:"+iterator.next()); 

    Iterator<x> innerIterator = setOfX.tailSet(iterator.next(),true).iterator(); 

使用次の()を1回iterator.hasNextの各呼び出しのための()、あなたは例外を持っていません。

+0

ええ、それは...編集提案にも感謝します。 – Omen

関連する問題