Java赋值操作顺序问题:求和程序修改后结果错误原因咨询
为什么修改后的代码会产生错误结果?
这问题的核心是代码执行顺序的改变导致累加的数值完全偏离了预期,咱们拿你提到的read=3的例子,分别走一遍两种代码的执行流程,差异一眼就能看出来。
正确代码的执行流程
原代码的逻辑是先累加当前的first值,再让first自增:
int first = 1; int sum = 0; while (first <= read) { sum = sum + first; first++; }
当read=3时的步骤:
- 初始状态:
first=1,sum=0 - 第1次循环:
1<=3成立 →sum=0+1=1→first变为2 - 第2次循环:
2<=3成立 →sum=1+2=3→first变为3 - 第3次循环:
3<=3成立 →sum=3+3=6→first变为4 - 循环判断:
4>3,结束循环,最终sum=6(正确的1+2+3的和)
修改后错误代码的执行流程
修改后的代码把first++放到了累加操作之前,变成先自增再累加:
int first = 1; int sum = 0; while (first <= read) { first++; sum = sum + first; }
同样用read=3来走流程:
- 初始状态:
first=1,sum=0 - 第1次循环:
1<=3成立 →first先变为2 →sum=0+2=2 - 第2次循环:
2<=3成立 →first变为3 →sum=2+3=5 - 第3次循环:
3<=3成立 →first变为4 →sum=5+4=9 - 循环判断:
4>3,结束循环,最终sum=9(错误的2+3+4的和)
本质原因
原代码是从1开始,依次累加1到read的所有整数;而修改后的代码变成了从2开始,累加2到read+1的所有整数。相当于少加了1,多加了read+1,总和的差值为(read+1) - 1 = read,所以结果会比正确值大read:
- 当read=3时,错误结果比正确值大3(9-6=3)
- 当read=7时,错误结果比正确值大7(35-28=7)
内容的提问来源于stack exchange,提问作者ABZEDZ
相关产品推荐
相关产品推荐

