关于这种追踪,我有一些问题

时间:2016-03-28 12:29:40

标签: java tracing

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.有人可以向我解释发生了什么吗? / p>

此外,在获得我的第一个输出后,我该怎么办? 下一个条件是:

if (x > 5)
  p += 4 / 2;
else
  p += 3 % 1;

因为x <5,我应该选择其他条件,对吗? 我的最后一个问题是,在使用p += 3%1之后,我的p仍然是1,所以我会回到这个循环(因为p <12)或者我是否已退出此循环并继续执行第19行?我不知道该怎么做。

2 个答案:

答案 0 :(得分:1)

在第12行中,您使用的是post incrementx++)。您应该使用预增量++x

后期增量会将x的当前值放在您的对帐单中,然后会增加x

预增量最初增加x,之后将结果放入您的陈述中。

答案 1 :(得分:0)

第一次3%1=0 p +=3%1 =&gt; p+=0这就是为什么p仍然是1