我们想要一个循环来达到某个指数或无休止地运行
所以我们有一个属性 loopCount ,可以大于0 OR -1。
我们想要一个有2个停止条件的循环:
1.到达 loopCount 。
2.无尽的 - loopCount == -1
所以这里是代码:
for (int i = 0; (loopCount == -1 || i < loopCount) ; i++) {
doSomething();
}
在这种情况下,不优雅的是
loopCount == -1
我继续增长,可能会达到INT_MAX。
任何有关更优雅方式的想法?
答案 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
计算从1
到3
。在无休止的情况下,i
保持不变。