2013-04-02 100 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是根本不需要。