【发布时间】:2016-03-28 12:29:39
【问题描述】:
public class Task {
public static void main(String args[]) {
int x = 0, p = 0, sum = 0;
p = 1;
x = 2;
double q;
sum = 0;
while (p < 12) {
q = x + p - (sum + 5 / 3) / 3.0 % 2;
sum = sum + (x++) + (int) q;
System.out.println(sum);
if (x > 5)
p += 4 / 2;
else
p += 3 % 1;
}
sum = sum + p;
System.out.println(sum);
}
}
在进行到第 12 行 (sum = sum + (x++) + (int)q;) 时,我认为 sum 应该是 5,但实际上输出是 4。我在交互窗格中尝试了第 12 行,确实看到了 sum=4。我不明白。 x++ 不应该产生 3 (x=2) 并且如果它被添加到 (int) q (双 q 给了我 2.666666 之类的东西),我应该得到 5。有人可以向我解释发生了什么吗?
另外,在获得第一个输出后,我应该如何进行? 下一个条件是:
if (x > 5)
p += 4 / 2;
else
p += 3 % 1;
因为 xp += 3%1 之后,我的 p 仍然是 1,所以我是返回这个循环(因为 p
【问题讨论】:
-
x 将在 sum 归属后递增。
-
感谢您的反馈。但我还是不明白为什么 sum=4 而不是 5。你能再解释一下吗?
-
x++(增量)在当前指令之后完成,因此在计算总和时 x 为 2。之后,它将变为 3。
-
如果你使用预增量(++x),就像Alexey说的那样,增量会在计算总和之前完成,所以结果是5。
-
哦,谢谢!我一直对前/后增量感到困惑。现在我明白发生了什么。还有一件事,你能告诉我计算总和后会发生什么吗?之后,p 仍然保持为 1,这是否意味着我继续回到这个 while 循环中?如果 p 不等于 12,我将无法离开这个循环。我不确定我的想法是否正确。