我为基本问题道歉,但我对Java的新见感让我有些沮丧,我无法通过搜索找到一种优雅的方式来做到这一点。
我想使用For构造迭代链表,但也有一个数字迭代器,这样我可以在一定次数的迭代后打破循环。
我有这个LL,我正在迭代:
LinkedList<SearchResult> docSearch;
我尝试这样做,但只有迭代器部分工作(结果总是停留在每次迭代的第一个条目)
for (SearchResult result : docSearch) while (iter2 < 50) {
//do stuff
iter2 = iter2 + 1;
}
感谢任何建议
答案 0 :(得分:2)
如果你必须进行那种检查,那么我只想在块中使用if。
for (SearchResult result : docSearch) {
if (iter2 >= 50) break;
//do stuff
iter2 += 1;
}
答案 1 :(得分:1)
最好使用常规for..loop语法来处理您的需求
for (int i = 0; i < 50 && i < docSearch.getSize(); i++ ) {
SearchResult result = docSearch.get(i);
}
仅仅因为Java支持每个循环,并不意味着我们每次都必须使用它。我发现使用常规for..loop语法更容易阅读,你的条件被隔离在一个地方。如果您使用for-each with break,那么您有2个地方会影响您的代码流。
答案 2 :(得分:0)
你在哪里分配了iter2的值?
试
for (SearchResult result : docSearch)
{
int iter2 = 0;
while (iter2 < 50) {
//do stuff
iter2 = iter2 + 1;
}
}
答案 3 :(得分: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;
}
您可以使用标准for循环并将这两个条件放入条件部分
Iterator<SearchResult> iter = docSearch.iterator();
for(SearchResult result = iter.next(); iter.hasNext() && iter2 < 50; result = iter.next()) {
// do stuff
iter2 = iter2 + 1;
}
答案 4 :(得分:0)
for (SearchResult result : docSearch) {
if (iter2++ >= 50) break;
//do stuff
}
这里也许是一个增加后期的好地方。 :)