[英]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)
,計數循環后循環將停止。 這里唯一的缺點是, i
從1
數到3
。 在無休止的情況下, i
保持不變。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.