簡體   English   中英

Java:帶有額外停止條件的優雅for循環

[英]Java: elegant for-loop with extra stop condition

我們希望循環達到某個索引或無限循環。
因此,我們有一個屬性loopCount ,它可以大於0 -1。

我們希望有一個包含2個停止條件的循環:
1.到達loopCount
2.無休止-loopCount == -1。

所以這是代碼:

for (int i = 0; (loopCount == -1 || i < loopCount) ; i++) {
   doSomething();
}

不好的是,以防萬一
loopCount == -1
我繼續增長,並可能達到INT_MAX。

有什么更優雅的想法嗎?

為什么不利用||的事實呢? 短路

采用

for (int i = 0; loopCount == -1 || i++ < loopCount; /*intentionally blank*/) {

這樣一來, i 如果只是增加loopCount 不是 -1,和我已經足夠小心地使用i++而非++i

我也刪除了不必要的括號。

考慮將其分為兩個循環:

while(loopCount == -1){
    doSomething();
}
for (int i = 0; i < loopCount ; i++) {
    doSomething();
}

如果loopCount = -1,那么您將有一個無限的while循環,並且for循環將永遠不會執行。 如果loopCount> 0,則while循環將被忽略,僅執行for循環。

不知道這是否足夠優雅...但要使其簡單易讀且全部在一行中

for (int i = 0; (loopCount == -1 || i < loopCount) ;  i = (loopCount > 0) ? i++ : i) {
    doSomething();
  }
int i = 0;
while(i == -1 || i < loopCount) {
    doSomething();
    if(i != -1)
        i++;
}

當i == -1時無限地運行,但僅在其不是無限循環時加起來,避免了我達到INT_MAX。

為了提高可讀性並避免短路評估,可以考慮使用此解決方案

final int loopCount = 3; // -1
final boolean endlessly = (loopCount == -1);

int i = 0;
while (endlessly ? true : i++ < loopCount) {
    doSomething(i);
}

如果loopCount為-1,則while (true)被無限執行。 否則, while (i++ < loopCount) ,計數循環后循環將停止。 這里唯一的缺點是, i1數到3 在無休止的情況下, i保持不變。

暫無
暫無

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

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