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
相关产品推荐
相关产品推荐

