【发布时间】:2017-01-11 07:53:54
【问题描述】:
我无法理解为什么部分代码会运行:
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的区别吗?如果没有,请研究一下,然后您就会知道为什么您的代码会这样工作。 -
怎么可能收到这样的输出?无法复制!
-
@xenteros ideone.com/jr9QDr
-
@xenteros 只需将打印语句更改为: System.out.print("i++= " + i + " m=")
-
@Tom 别担心,没有标记
标签: java while-loop compare