这里的i++是if里面的吗,为什么最终结果是5

可以讲讲这个思路吗,我怎么算都是错的?
while i小于3 是指最开始的i吗

img

初始:i=0,s=0
循环第一次:i%2!=0不满足,执行i++,i变为1,s变为1,i<3满足,进入第二次
第二次:i%2!=0满足,执行i=i+2,i变为3,再执行i++,i变为4,s变为5,i<3不满足,循环结束

while(i<3)是在do的那个语句块执行一次后,再判断while里的条件; 然后i++是if后面的代码,因为它没有被包含在if里面,所以它是无论if是否执行都会执行一次的,具体执行过程如下:

1、首先,i=0, s=0, 进入do-while循环执行do的部分:
首先判断if里的条件是否满足,0%2==0 ,所以if不执行;
然后,执行i++后,i=1, 接着执行s=s+i, s=1, 最后判断while的条件,1<3, 继续循环执行do的部分。

2、接着,第二次执行do的部分,:
首先判断if的条件,1%2!=0 ,所以if执行, i= 1+2 =3;
接着执行i++后,i=4; 然后执行s=s+i=1+4=5, 最后判断whie的条件,5>3 ,条件不再满足,退出do-while循环;
所以最后,i的值为4,s的值为5.

测试代码如下:


public class DoWhileTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int i=0,s=0;
        do {
            if(i%2!=0) {
                i=i+2;
            }
            i++;
            s= s+i;
        }while(i<3);
        
        System.out.println("i="+i+",s="+s);
        
    }

}


img

1、i=0,i%2!=0不成立,i++变成1,s变成1,i<3循环条件成立,继续执行do
2、i=1,i%2!=0成立,i变成3,i++变成4,s变成5,i<3循环条件不成立,退出循环
最终结果,i=4,s=5