我无法理解为什么部分代码甚至会运行:
private int m;
private int n;
public void f() {
m = (m +2) % n;
System.out.print(m+"\n");
}
public void g() {
int i=0;
m=0;
n=8;
while (i++<n) {
System.out.print("i=" + i + " m=");
f();
}
}
如果我运行 g()
,我打印出以下内容:
i++=1 m=2
i++=2 m=4
i++=3 m=6
i++=4 m=0
i++=5 m=2
i++=6 m=4
i++=7 m=6
i++=8 m=0
据我了解,最后一行不应出现。为什么 f()
上次得到了吗?
何时 f()
第一次被调用,i = 0
那里有i++ = 1
。 (所以当我打印 i
时,它已经等于 1
)。
当我打电话f()
时倒数第二次,i = 6
,还有i++ = 7
。这是最后一个整数,即 < n
(n = 8
)。
为什么当 i++
时该函数再次被调用已经是= 8
?这真的让我很困惑。
最佳答案
使用++i
而不是i++
.
i++ 制作一个副本,增加 i,然后返回副本,因此它将 返回 i 的旧值(后增量)。
++i 增加 i,并返回更新后的值 i(预增量)。
所以当你检查条件i++<n
时它使用旧值进行检查,因此条件评估为 true。
关于Java:i++ 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39305260/