0

私はこのイテレータを持っています、

Set<BigFraction> key = knowledgeD.keySet();
    TreeSet<BigFraction> sortKey = new TreeSet<BigFraction>();
        sortKey.addAll(key);

    Iterator<BigFraction> iter = sortKey.iterator();
        return iter;

BigFraction は、これを int などでサブするだけで簡単になる場合のデータ型です。

とにかく、後でイテレータを呼び出したとき

while (iterator().hasNext());

それは基本的に、何らかの無限ループを提供するだけです...そして、この while ループの前に iterator() を出力すると、

java.util.TreeMap$KeyIterator@53b4b24d

どんなアイデアも行き詰まっている

よろしく、

シム

4

4 に答える 4

5

次のように使用する必要がありますIterator:-

while (iter.hasNext()) {
    System.out.println(iter.next()); //Do whatever you want
}

wherehasNext()は、iteratorさらに値があるかどうかnext()を示し、反復子の次の値を返します。

また、現在のiteratorループが機能していない (無限ループに陥っている) 理由の説明は、 @jacobmによって説明されています。

于 2013-04-02T05:07:33.823 に答える
4

iterator().hasNext()イテレータを進めることはなく、要素があるかどうかを確認するだけです。したがってwhile (iterator().hasNext());、反復する値がある場合は常に無限ループになります。次の方法で修正できます。

Iterator<BigFraction> it = iterator();
while (it.hasNext()) {
  it.next();
}
于 2013-04-02T05:07:31.783 に答える
2

iterator() の呼び出しは新しい反復子を構築するため、コードはループを通過するたびに新しい反復子を構築します。代わりに次のようなものを試してください:

Iterator it = iter;
while (it.hasNext()) {
    it.next()
}

next()ループのたびに呼び出すようにしてください。そうしないと、イテレータがインクリメントされず、最初の項目にとどまります。

于 2013-04-02T05:09:39.700 に答える
1

Iterator#hasNext繰り返しにさらに要素がある場合は true を返しますが、繰り返しの次の要素は返しません。それIterator#nextはします。

iterator#nextコレクションの次の要素を取得するために呼び出す必要がある場合にイタレータを使用する場合、hasNext操作はオプションです

あなたはどちらかを書くことができます-

while (iter.hasNext()) {
    Object oj = iter.next();
}

また

Object obj = null;
while ( (obj = iter.next())!=null) {
    ....
}

このアプローチhashNextでは、まったく必要ありません。

于 2013-04-02T05:10:36.777 に答える