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

Java:具有额外停止条件的优雅for循环,java,loops,for-loop,while-loop,int,Java,Loops,For Loop,While Loop,Int,我们希望循环达到某个索引或无休止地运行。 因此,我们有一个属性loopCount,它可以大于0或-1。 我们希望有一个具有2个停止条件的循环: 1.到达循环计数 2.无休止地-循环计数==-1. 下面是代码: for (int i = 0; (loopCount == -1 || i < loopCount) ; i++) { doSomething(); } for(int i=0;(loopCount==-1 | | i

我们希望循环达到某个索引或无休止地运行。
因此,我们有一个属性loopCount,它可以大于0-1。

我们希望有一个具有2个停止条件的循环:
1.到达循环计数
2.无休止地-循环计数==-1.

下面是代码:

for (int i = 0; (loopCount == -1 || i < loopCount) ; i++) {
   doSomething();
}
for(int i=0;(loopCount==-1 | | i
这件事的不雅之处在于,以防万一
循环计数==-1
我继续成长,可能会达到INT_最大值


有什么更优雅的方法吗?

为什么不利用短路这一事实呢

使用

for(int i=0;loopCount==-1 | | i++
这样,
i
只有在
loopCount
不是-1时才会递增,而且我已经非常小心地使用了
i++
而不是
++i


我还删除了不必要的括号。

考虑将其分为两个循环:

while(loopCount == -1){
    doSomething();
}
for (int i = 0; i < loopCount ; i++) {
    doSomething();
}
while(loopCount==-1){
doSomething();
}
for(int i=0;i
如果loopCount=-1,则将有一个无止境的while循环,for循环将永远不会执行。如果loopCount>0,while循环将被忽略,而只执行for循环。

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

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

不确定这是否足够优雅…但要保持它的简单可读性,并且全部放在一行中

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

<>代码>

为了更好的可读性和避免短路评估,你可以考虑这个解决方案

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

int i = 0;
while (endlessly ? true : i++ < loopCount) {
    doSomething(i);
}
final int loopCount=3;//-1
最终布尔值无穷=(loopCount==-1);
int i=0;
while(无休止?真:i++

如果
loopCount
为-1,则
while(true)
将无休止地执行。否则
while(i++
和循环在计数循环后停止。这里唯一的缺点是
i
1
计数到
3
。在无休止的情况下,
i
将保持不变。

您问过“为什么不利用| |短路这一事实呢?"我的答案是:让代码更清晰,避免副作用。比如在条件检查中增加变量。这种东西来自C和C++世界,这是习惯用法。这不是VBA。但是我尊重投票。不,它不是VBA。它是java。加上一个;以高雅为代价的卓越的维护性。薄。再多说一点,这也算不上不雅。
final int loopCount = 3; // -1
final boolean endlessly = (loopCount == -1);

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