for (int i = 0; i < 10; i++) {
// ...
if (iWantToRepeat) {
i--;
continue;
}
// ...
}
for (Foo f : Bar) {
// ...
if (iWantToRepeat) {
// What can I put here?
}
// ...
}
有没有办法重复增强的for循环迭代?我感觉可能有,因为它基于迭代器,如果我可以访问它们,我可以这样做。
答案 0 :(得分:5)
for (Foo f : Bar) {
boolean iWantToRepeat;
do {
// ...
iWantToRepeat = //...;
// ...
} while(iWantToRepeat);
}
答案 1 :(得分:4)
不,你不能重复循环中的元素。唯一的解决方案是在增强版中添加一个新循环。在我看来,这应该是这样做的方法,即使是经典的,前后不是很干净,在审查代码时可能更难理解。
for (Foo f: bar) {
boolean notEnough=false;
do {
... //this code will be always executed once, at least
// change notEnough to true if you want to repeat
} while (notEnough);
}
或
for (Foo f: bar) {
boolean notEnough=chooseIfYouWantToRunIt();
while(notEnough) {
... //this code can be not executed for a given element
}
}
答案 2 :(得分:3)
你应该将增强的for循环视为纯粹的快捷方式,只需95%的时间你只需要迭代一些东西,而不做任何事情&#34;不寻常&#34;它不支持(修改你正在迭代的内容,不止一次迭代某些元素等)。
但是,如果您的用例属于上述类别之一,那么您只需要回归使用标准for循环(毕竟,编写的代码几乎没有那么多,并且肯定比为每个循环黑客攻击获得相同的结果要好得多。)