Java 使用while循环递增奇数值会显示错误的必需值

Java 使用while循环递增奇数值会显示错误的必需值,java,Java,为什么随附的代码给了我这个输出: 3 , 5 , 7 , 9 它应该只显示偶数值 public static void main (String [] args){ int i = 1; while ( i < 10 ){ if ((i++)%2 == 0){ System.out.println(i); } }} publicstaticvoidmain(字符串[]a

为什么随附的代码给了我这个输出:

3 , 5 , 7 , 9
它应该只显示偶数值

public static void main (String [] args){
    int i = 1;
    
    while ( i < 10 ){
        if ((i++)%2 == 0){
            System.out.println(i);
          
        }
    }}
  
publicstaticvoidmain(字符串[]args){
int i=1;
而(i<10){
如果((i++)%2==0){
系统输出打印LN(i);
}
}}

这是因为您正在if中执行
i++
。此处的后增量表示条件中计算的值是预增量,但当到达print语句时,它已递增。尝试在if之后递增。

尝试以下代码:

public static void main (String [] args){
int i = 1;

while ( i < 10 ){
    if ((++i)%2 == 0){
        System.out.println(i);
      
    }
}}
publicstaticvoidmain(字符串[]args){
int i=1;
而(i<10){
如果(++i)%2==0){
系统输出打印LN(i);
}
}}
  • 评估在增量之前完成
  • 在增量之后进行打印
inti=1;
而(i<10){
如果((i++)%2==0){//i在增量之前的“偶数”时计算为true
System.out.println(i);//打印后增量i
}
}

要更正此问题,只需在打印值后将自动增量移到要增量的
i

左侧:
如果(i%2==0){System.out.println(i++);}
您正在用i检查条件,然后由于增量后的原因打印i+1。
int i = 1;

while ( i < 10 ){
    if ((i++)%2 == 0)  {        // i evaluated true while "even" before increment
        System.out.println(i);  // printing post increment i 
    }
}