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

Java两种for循环执行逻辑为何不同?代码运行结果差异咨询

问题分析:两种for循环结果差异的原因

先看你的代码:

public static int[] plusOne(int[] digits) {
   long n = 0;
   for(int i = 0; i < digits.length; i++) {
     n = n*10+digits[i];
   }
   System.out.println(n);
   n = 0; 
   for(int i : digits) {
     n = n*10+digits[i];
   }
   System.out.println(n);
   return digits;
}

核心错误点

增强for循环里的i是数组的元素值,不是索引!

传统for循环中,i是从0到9的索引,digits[i]依次取数组第0位到第9位的元素(9、8、7...0),计算逻辑完全正确。

但增强for循环里,i遍历的是数组中的每一个元素:第一次i=9,第二次i=8,直到最后i=0。此时你写digits[i],相当于用当前元素值当索引去取数组元素,完全偏离了原本的逻辑。

具体计算过程(输入数组{9,8,7,6,5,4,3,2,1,0})

增强for循环的执行步骤:

  • 初始n=0
  • 第1次:i=9 → n = 0*10 + digits[9] = 0+0=0
  • 第2次:i=8 → n = 0*10 + digits[8] = 0+1=1
  • 第3次:i=7 → n = 1*10 + digits[7] = 10+2=12
  • 第4次:i=6 → n =12*10 + digits[6] =120+3=123
  • 第5次:i=5 → n=123*10 + digits[5]=1230+4=1234
  • 第6次:i=4 → n=1234*10 + digits[4]=12340+5=12345
  • 第7次:i=3 → n=12345*10 + digits[3]=123450+6=123456
  • 第8次:i=2 → n=123456*10 + digits[2]=1234560+7=1234567
  • 第9次:i=1 → n=1234567*10 + digits[1]=12345670+8=12345678
  • 第10次:i=0 → n=12345678*10 + digits[0]=123456780+9=123456789

这就是你看到输出123456789的原因。

修正后的增强for循环

把digits[i]改成直接用循环变量(建议把变量名改成num避免混淆):

n = 0; 
for(int num : digits) {
  n = n*10 + num;
}
System.out.println(n); // 输出9876543210,符合预期

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:37:45