Java:优雅的for循环,具有额外的停止条件

时间:2016-03-07 14:46:07

标签: java loops for-loop while-loop int

我们想要一个循环来达到某个指数或无休止地运行 所以我们有一个属性 loopCount ,可以大于0 OR -1。

我们想要一个有2个停止条件的循环:
1.到达 loopCount
2.无尽的 - loopCount == -1
所以这里是代码:

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

在这种情况下,不优雅的是 loopCount == -1
我继续增长,可能会达到INT_MAX。

任何有关更优雅方式的想法?

5 个答案:

答案 0 :(得分:4)

为什么不利用|| 短路的事实?

使用

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

这样,i只会增加,如果 loopCount -1,我已经足够小心使用了i++而不是++i

我也放弃了不必要的括号。

答案 1 :(得分:4)

考虑将其分为两个循环:

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

如果loopCount = -1那么你将有一个无限的while循环,for循环永远不会被执行。如果loopCount&gt; 0将忽略while循环,只执行for循环。

答案 2 :(得分:1)

不确定这是否足够优雅......但要保持简单易读且全部在一行

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

答案 3 :(得分:0)

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

在i == -1时无休止地运行但是只有在它不是无限循环的情况下才会加起来,避免我达到INT_MAX。

答案 4 :(得分:0)

为了更好的可读性并避免短路评估,您可以考虑使用此解决方案

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计算从13。在无休止的情况下,i保持不变。