You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中for循环为何跳过最后一次迭代?循环次数异常排查

循环迭代异常:第三次for循环未按预期执行2次

问题说明

我的for循环在第三次迭代时本该执行2次,却只跑了1次。试过把Math.ceil的结果强制转成int,问题还是没解决。

代码与变量定义

初始变量

String [] words = {"Lorem","ipsum","dolor","sit","amet","consectetur","adipiscing","elit."}; 
int spaceCount = 7;
int wordCount = 4;

循环逻辑代码

int start = 0; // 补充原代码未显式定义的变量
String output = "";
int j;
while(wordCount > -1){
  output += words[start];
  System.out.println("output:" + output);
  System.out.println("spaceCount:" + spaceCount);
  System.out.println("wordCount:" + wordCount);
  start++;
  System.out.println("j<:" + Math.ceil((double)spaceCount/(double)wordCount));
     for(j=0; j < Math.ceil((double)spaceCount/(double)wordCount); j++){
       System.out.println("j:" + j);
       output += " ";
       spaceCount--;
     }
  wordCount--;
}

实际运行结果

output:Lorem
spaceCount:7
wordCount:4
j<:2.0
j:0
j:1
output:Lorem  ipsum
spaceCount:5
wordCount:3
j<:2.0
j:0
j:1
output:Lorem  ipsum  dolor
spaceCount:3
wordCount:2
j<:2.0
j:0
output:Lorem  ipsum  dolor sit
spaceCount:2
wordCount:1
j<:2.0
j:0
output:Lorem  ipsum  dolor sit amet,

期望运行结果

output:Lorem  ipsum  dolor
spaceCount:3
wordCount:2
j<:2.0
j:0
j:1
output:Lorem  ipsum  dolor  sit
spaceCount:1
wordCount:1
j<:1.0
j:0
output:Lorem  ipsum  dolor  sit amet,

问题原因与解决办法

核心问题

第三次while循环里,for循环的终止条件在执行过程中变了:

  • 一开始spaceCount=3,wordCount=2,算出来Math.ceil(3/2)=2.0,所以for循环条件是j<2。
  • 当j=0执行完,spaceCount减到2,此时判断j=1是否满足j < Math.ceil(2/2)=1.0,1不小于1,循环直接停了,只跑了1次。

解决方法

提前把本次要加的空格数算好存起来,别让for循环的终止条件跟着spaceCount变:

修改后的代码:

int start = 0;
String output = "";
int j;
while(wordCount > -1){
  output += words[start];
  System.out.println("output:" + output);
  System.out.println("spaceCount:" + spaceCount);
  System.out.println("wordCount:" + wordCount);
  start++;
  // 提前计算本次需要添加的空格数,用临时变量存住
  int spacesToAdd = (int) Math.ceil((double)spaceCount/(double)wordCount);
  System.out.println("j<:" + spacesToAdd);
     for(j=0; j < spacesToAdd; j++){
       System.out.println("j:" + j);
       output += " ";
       spaceCount--;
     }
  wordCount--;
}

这样每次while循环先确定好要加的空格总数,for循环只按这个固定值执行,就不会出现中途终止的情况,完全符合预期。

内容的提问来源于stack exchange,提问作者Jorge Gabriel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 17:15:42