2011-03-08 54 views
1

我對基本的問題表示歉意,但是我對Java的新穎感覺讓我感到沮喪,而且我無法從我的搜索中找到一種優雅的方式來完成此操作。Java執行For循環,但也使用鏈接列表(「For,While」)循環的迭代器?

我想使用For構造遍歷鏈表,但也有一個數值迭代器,以便在經過一定次數的迭代後可以打破循環。

我有這樣的LL,我通過迭代:

LinkedList<SearchResult> docSearch; 

我試圖做這樣的,但那麼只有迭代器部分工作(結果總是停留在每次迭代的第一個條目)

for (SearchResult result : docSearch) while (iter2 < 50) { 

//do stuff 
iter2 = iter2 + 1; 
} 

任何建議表示讚賞

+0

你究竟想要什麼?循環遍歷所有元素,但是在經過一定次數的迭代之後破壞?如果列表中的元素少於特定數量,該怎麼辦? – RAY 2011-03-08 03:21:54

回答

2

如果您需要做的那種檢查的話,我只想做,如果其與該塊。

for (SearchResult result : docSearch) { 
    if (iter2 >= 50) break; 

    //do stuff 
    iter2 += 1; 
} 
+0

好的,謝謝(以爲你的意思是忽略掉while部分?),我之前在Python中使用過類似的方法,但並未意識到我可以在Java中執行此操作。謝謝 – Rick 2011-03-08 03:06:55

+0

我想你會編輯'while (iter2 <50)'在第一行:) – 2011-03-08 03:11:36

+0

是的,這是一個複製和粘貼失敗。我的意思是放棄這部分。 – 2011-03-08 03:13:36

1

這將是更好地使用常規for..loop語法來處理您的需求

for (int i = 0; i < 50 && i < docSearch.getSize(); i++) { 
    SearchResult result = docSearch.get(i); 
} 

僅僅因爲支持Java for-each循環,並不意味着我們每次都使用它。我發現使用普通的.loop語法更容易閱讀你的情況在一個地方隔離的地方。如果你使用for-each,那麼你有兩個影響你的代碼流的地方。

+0

對於鏈表,你不應該使用索引訪問,儘管 - 你的循環有O(n^2)運行時間(n = 50),一個基於迭代器的變體只有O (N)。 (對於n = 50可能無關緊要,但對於較大尺寸而言,這一點很重要。) – 2011-03-08 14:13:45

0

你在哪裏分配了iter2的值?

嘗試

for (SearchResult result : docSearch) 
{ 
    int iter2 = 0; 
    while (iter2 < 50) { 

    //do stuff 
    iter2 = iter2 + 1; 
    } 
} 
0

如果你這樣做:

for (SearchResult result : docSearch) while (iter2 < 50) { 

//do stuff 
iter2 = iter2 + 1; 
} 

這是完全一樣的這樣做:

for (SearchResult result : docSearch) { 

    while (iter2 < 50) { 

    //do stuff 
    iter2 = iter2 + 1; 
    } 
} 

可以解決這個問題在許多方面。一個是休息(雖然在此爲麪條代碼有些皺眉。

for (SearchResult result : docSearch) { 
if(iter2 >= 50) break; 
//do stuff 
iter2 = iter2 + 1; 
} 

您可以使用循環標準,並將這兩個條件,進入條件部分

Iterator<SearchResult> iter = docSearch.iterator(); 
for(SearchResult result = iter.next(); iter.hasNext() && iter2 < 50; result = iter.next()) { 
    // do stuff 
    iter2 = iter2 + 1; 
} 
0
for (SearchResult result : docSearch) { 
    if (iter2++ >= 50) break; 
    //do stuff 
} 

這裏可能是一個不錯的地方爲後增量:)