【问题标题】:I have some questions regarding this tracing我对此追踪有一些疑问
【发布时间】: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,我将无法离开这个循环。我不确定我的想法是否正确。

标签: java trace


【解决方案1】:

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

后增量将x 的当前值放入您的语句中,然后增加x

预增量最初增加x,然后将结果放入您的语句中。

【讨论】:

    【解决方案2】:

    第一次,3%1=0 p +=3%1 => p+=0 这就是为什么 p 仍然是 1

    【讨论】:

    • 问题是我确实发现了 p=1 但基本上我对第 12 行感到困惑,它要求我提供总和。我得到了 5,但实际上是 4。你知道上面发生了什么吗?
    • 在我得到 p=1 之后,我要回到这个 while 循环吗?我如何摆脱这个while循环?看起来 p 将保持为 1。
    • 第 4 次循环后,x 将是 6,然后,p 将在语句 p+=4/2 中重新分配,得到 p+=2;那么每次循环通过时 p 将是 3,5,7,9,11,13。当 p=13 时,循环终止
    • @Hades,我认为你应该学习如何在 Eclipse/netbean 之类的 IDE 工具中调试,然后一步一步运行,看看它是如何工作的
    • 好的,谢谢,我明白现在发生了什么。是的。尽管我一直认为现在学习如何调试很重要,但我还是有点避免进行调试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2014-01-28
    • 2019-06-01
    • 2020-08-14
    • 1970-01-01
    相关资源
    最近更新 更多