[英]Repeat iteration in enhanced-for loop
for (int i = 0; i < 10; i++) {
// ...
if (iWantToRepeat) {
i--;
continue;
}
// ...
}
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.