在增强型for循环中重复迭代

时间:2014-07-24 09:42:19

标签: java for-loop

常规for循环

for (int i = 0; i < 10; i++) {
    // ...

    if (iWantToRepeat) {
        i--;
        continue;
    }

    // ...
}

增强的for-loop

for (Foo f : Bar) {
    // ...

    if (iWantToRepeat) {
        // What can I put here?
    }

    // ...
}

有没有办法重复增强的for循环迭代?我感觉可能有,因为它基于迭代器,如果我可以访问它们,我可以这样做。

3 个答案:

答案 0 :(得分:5)

不,你不能。在每次迭代中,Iterator都会逐步完成。但是,您可以使用do-while循环来获得相同的效果:

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循环(毕竟,编写的代码几乎没有那么多,并且肯定比为每个循环黑客攻击获得相同的结果要好得多。)