簡體   English   中英

在增強型for循環中重復迭代

[英]Repeat iteration in enhanced-for loop

定期循環

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

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

    // ...
}

增強了for循環

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

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

    // ...
}

有沒有辦法重復增強的for循環的迭代? 我感覺可能有,因為它基於迭代器,如果我可以訪問它們,我想我可以做到。

不,你不能。 在每次迭代中, 迭代器都會前進一步。 但是,您可以使用do-while循環來獲得相同的效果:

for (Foo f : Bar) {
    boolean iWantToRepeat;
    do {
        // ...
        iWantToRepeat = //...;
        // ...
    } while(iWantToRepeat);
}

不,你不能重復循環中的元素。 唯一的解決方案是在增強版中添加一個新循環。 在我看來,這應該是即使在經典中也是如此,前后不是很干凈,在查看代碼時可能更難理解。

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

   } 
}

你應該將增強的for循環看作純粹的快捷方式,只需95%的時間你只需要迭代一些東西,而不做任何它不支持的“異常”(修改你正在迭代的東西,迭代一些元素)不止一次,等等)

但是,如果你的用例屬於上述類別之一,那么你只需要回到使用標准for循環(畢竟,編寫的代碼幾乎沒有那么多,並且肯定比黑客攻擊更好。為每個循環獲得相同的結果。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM