2013-04-02 134 views
0

我有这个迭代器,迭代器返回随机字母不能让它迭代

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

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

BigFraction仅仅是数据类型,如果它使任何容易只是int或东西Sub此。

反正当我打电话迭代后来就

while (iterator().hasNext()); 

它基本上只是给了我somesort的无限循环......当我这个while循环之前打印输出迭代器()我得到

[email protected] 

任何想法的那种卡,

问候,

Sim

+2

它应该是'iterator.hasNext()'...你曾经调用过迭代器吗?next()'(这是什么使计数器前进到下一个对象,并可能使它耗尽)? – PaulProgrammer

+0

@PaulProgrammer no iterator.hasNext()不适用于这个while循环它抛出一个错误 – Sim

回答

5

您需要使用您的Iterator这样的: -

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

其中hasNext()告知用户,如果iterator有更多的值或没有,next()返回的下一个值迭代器。

另外,解释为什么您当前的iterator循环不工作(进入无限循环),已被@jacobm解释。

+0

@Sim - 这只是如何使用'Iterator'的方式。您需要在任何需要的地方使用它。可能调用方法有一些其他的'iterator'变量名称。检查一下。 – SudoRahul

4

iterator().hasNext()永远不会推进迭代器,它只是检查它是否有一个元素。如果有任何值要迭代,那么while (iterator().hasNext());将总是无限循环。你可以解决它:

Iterator<BigFraction> it = iterator(); 
while (it.hasNext()) { 
    it.next(); 
} 
2

对iterator()的调用会构造一个新的迭代器,所以您的代码将在每次循环中构造一个新的迭代器。相反,你可以试试:

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

一定要打电话next()通过每一次循环,否则你不会递增迭代器,它会仅仅停留在第一个项目。

+0

废话现在我只是在迭代器中获得所有的值,我想它的工作只是我的方法必须是错误的,谢谢 – Sim

1

Iterator#hasNext如果迭代中有更多元素,它将不返回迭代中的下一个元素,则返回true。其中Iterator#next做。

如果使用itarator如果你非要叫iterator#next获得集合的下一个元素,但hasNext是操作是可选的

,你既可以写 -

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

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

这种方法hashNext是根本不需要。