关于自增运算

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的值

posted @ 2025-02-25 08:48  花灵上  阅读(28)  评论(0)    收藏  举报