Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 对于同一行中不同的循环结束条件?_Java_Loops_For Loop - Fatal编程技术网

Java 对于同一行中不同的循环结束条件?

Java 对于同一行中不同的循环结束条件?,java,loops,for-loop,Java,Loops,For Loop,假设您想从i=0到i=n和j=0到j=m循环,那么m=n。是否可以将以下两个循环缩短为一个 for(int i=0; i<=n; i++){} for(int j=0; j<=m; j++){} for(int i=0;i天真地说,我们想做如下事情: for(int i = 0, j = 0; i <= n || j <= m; i = Math.min(n, i+1), j = Math.min(m, j+1)) 只有当j完成递增时,如果您想保持(对于n

假设您想从i=0到i=n和j=0到j=m循环
,那么
m=n
。是否可以将以下两个循环缩短为一个

for(int i=0; i<=n; i++){}
for(int j=0; j<=m; j++){}

for(int i=0;i天真地说,我们想做如下事情:

for(int i = 0, j = 0; i <= n || j <= m; i = Math.min(n, i+1), j = Math.min(m, j+1))
只有当
j
完成递增时,如果您想保持(对于
n
i=n
,这才是复杂的。复杂的是,让循环在正确的时间终止,同时仍然允许
j
完成递增


为了使循环终止,我们希望将较大的数字一步增加到超过其最大值,以便达到终止标准。因为我们天真地知道
i中至少有一个,所以我们希望执行以下操作:

for(int i = 0, j = 0; i <= n || j <= m; i = Math.min(n, i+1), j = Math.min(m, j+1))
只有当
j
完成递增时,如果您想保持(对于
n
i=n
,这才是复杂的。复杂的是,让循环在正确的时间终止,同时仍然允许
j
完成递增


要使循环终止,我们需要将较大的数字一步增加到超过其最大值,以便达到终止条件。因为我们至少知道
i编辑

for(int i=0,j=0; i+1<=n || j+1<=m; ){
    if(i<n) i++;
    if(j<m) j++;
    // do stuff here
    // keep in mind that i and j starts from 1
}

for(inti=0,j=0;i+1编辑

for(int i=0,j=0; i+1<=n || j+1<=m; ){
    if(i<n) i++;
    if(j<m) j++;
    // do stuff here
    // keep in mind that i and j starts from 1
}
for(inti=0,j=0;i+1C++:

for(inti=0,j=0;jC++:


对于(int i=0,j=0;j您只能使用一个迭代器i,因为每次都将i和j增加1

for(int i=0; i<=n || i<=m;i++ ){
    if(i<=n) //{do first loop job}
    if(i<=m) //{do second loop job}
}

对于(int i=0;i您只能使用一个迭代器i,因为每次都将i和j增加1

for(int i=0; i<=n || i<=m;i++ ){
    if(i<=n) //{do first loop job}
    if(i<=m) //{do second loop job}
}

用于(int i=0;我刚刚又看了一遍你的答案!你测试过吗?在我看来,它会无休止地循环,因为一旦i和j达到它们的最终值n和m,它们就再也不会改变了,但循环条件仍然是真的。我正在应用向下投票。旧的答案不是无休止地循环,但它会使变量i有一个值如果m大于n,则为n+1。我用小提琴测试了代码。好的,我认为这看起来更好。我用上一票代替了下一票。我刚刚又看了一眼你的答案!你测试过吗?在我看来,它会无休止地循环,因为一旦我和j达到了n和m的最终值,它们就再也不会改变了,但循环条件会改变这仍然是真的。我正在应用向下投票。旧的答案不是无休止地循环,但它会导致变量I的值n+1,如果m大于n。我用小提琴测试了代码。好的,我认为这样看起来更好。我用向上投票取代了向下投票。
for(int i=0,j=0; i<=n || j<=m; ){
    if(i<=n) i++;
    if(j<=m) j++;
    // do stuff here
    // keep in mind that i and j starts from 1
}
for (int i=0, j=0; j<=m || i<=n; i+=i<=n, j+=j<=m ){}
for (int i=0, j=0; j<=m || i<=n; i+=(i<=n)?1:0, j+=(j<=m)?1:0 ){}
for(int i=0; i<=n || i<=m;i++ ){
    if(i<=n) //{do first loop job}
    if(i<=m) //{do second loop job}
}