关于自增运算
sum+=i++;
sum+=++i;
以运算1+2+3+.......+100为例,1行代码运行出来的结果是4950,2行代码运行出来的是5050为正确值,思考为何会差值100
以下为整体代码部分
public class WhileDemo2 {
public static void main(String[] args) {
//计算1+。。。。+100
int i = 0;
int sum = 0;
while(i<100){
sum+=i++;//sum+=++i;
}
System.out.println(sum);
}
由于i++和++i两者赋值和参加运算的方式不同:
i++为先给前面的变量赋值,再将i+1;
++i为先将i+1,再给前面的变量赋值。
代码中的求和运算可以将其拆开为:sum=sum+(i++)
程序刚开始运行时sum=0,i=0,刚进入循环执行第一次求和时sum=sum+i,此时的数字为sum=0+0,这条语句结束后i才自增变为1。所以一直循环直到i=99时,进入循环,sum为前面1+...+98的值,此时sum再加99,这条语句结束后i自增成为100,再想进入循环发现不满足<100的判定,所以此程序执行的是1+.....+99的值,值会比++i少100
-
又一个问题来了,我就想用i++,还得算出1+....+100,怎么解决呢?
很简单,将判定条件改为i<=100即可,这样i=100时也可以进入循环程序计算。
-
从而派生出又一个问题,我用i<=100来判断sum+=++i会发生什么呢?
public class WhileDemo2 { public static void main(String[] args) { //计算1+。。。。+100 int i = 0; int sum = 0; while(i<=100){ sum+=++i; } System.out.println(sum); }经过运行程序发现结果为5151,肯定不是1+....+100的结果,与正确值差101,进行分析。
++i为先将i+1,再给前面的变量赋值。
程序开始刚进入循环时i=0,sum=0,进入循环,sum=sum+(++i),第一次循环为sum=0+1,此时i=1。
+=运算逻辑是先进行加运算,再进行赋值运算
所以第一次循环结束sum=1,i=1,继续循环,直到i=99时,在进入循环前sum为1+.....+99的值,进入循环,sum+=++i,此时i先自增为100,再进行求和运算,再赋值给sum,到这时已经完成1+.....+100的计算,此时的i=100,再返回循环判定发现i仍满足,继续进入循环,这时i自增为101,再进行求和并赋值,所以代码计算的是1+......+100+101的值
浙公网安备 33010602011771号