在这个例子中:
int i = 1;
while(i < 10)
if(i++%2 == 0)
System.out.println(i);
为什么输出3,5,7,9
而不是2,4,6,8
?
答案 0 :(得分:4)
条件在前一个值i
上执行,在它递增之前(均匀),但输出是在递增的值i
(奇数)上完成的。 / p>
答案 1 :(得分:2)
在变量返回变量值后应用的++运算符,并在计算表达式后递增变量。语义与此相同:
int i = 1;
while(i < 10) {
boolean cond = i % 2 == 0;
i = i + 1;
if(cond) {
System.out.println(i);
}
}
答案 2 :(得分:0)
后增量运算符,在表达式中使用其操作数的当前值,然后递增它。
我们可以使用&#39; 2&#39;的字面值来解决这个问题。例如。 基本上这就是你现在的代码所做的事情:
int i = 2;
if (i % 2 == 0) //true, 2 % 2 = 0
i = i + 1; //i now becomes 3
System.out.println (i);
如果我们删除循环并放回代码
,则使其更简单int i = 1;
if (i++ % 2 == 0) //1 % 2 != 0
System.out.println (i); //Nothing will print for the if statement
System.out.print i; //Will print 2, because this print statement is outside
//the body of the if-statement
要获取您要查找的输出,您必须使用前缀增量运算符(++ i)
int i = 1;
if ( ++i % 2 == 0)
System.out.println (i);
这相当于
int i = 1
if ( (i + i) % 2 == 0) //++i increments i and then uses it in the expression
System.out.println (i);