【问题标题】:Why does it print out 0?为什么打印出0?
【发布时间】:2016-12-10 15:55:29
【问题描述】:

为什么答案是 0 而不是 1?我知道它与布尔语句有关,但我不知道它是如何工作的。据我了解,当 i 和 j 都等于 1 时,while 循环停止。

public void random(){
    int i = 0;
    int j = 2;
    int k = 0;
    boolean keepGoing;
    keepGoing = i<j;
    while (keepGoing && k<2) {
        i++;
        j--;
        k++;
    }
    System.out.println(j);
}

打印出 0

【问题讨论】:

  • 调试/单步调试你的代码,就会清楚发生了什么。

标签: java while-loop boolean


【解决方案1】:

您可能会这么说,因为您认为keepGoing 变量会停止循环... 那么keepGoing 变量根本不会改变!你用这个实例化了你的变量:

boolean keepGoing;
keepGoing = i<j;

此表达式将查看ij 的值代码中的那个时刻,将这些变量替换为它们的值(当时分别为 0 和 2),然后就处理比较。由于i 小于j 在代码中的那一刻,它将返回true 并将keepGoing 设置为true。之后,keepGoing 不会在每次 ij 更改时自行更改。这不是它的工作方式。 keepGoing 的值只有在你设置另一个值时才会改变! 一般来说,只有在遇到明确的行(或方法)告诉它更改时,变量才会更改。因此,如果您希望每次更改 @987654334 时都更改 keepGoing @ 或 j,每次发生这种情况时,您都必须明确地重新计算 keepGoing。在您的情况下,这将在您的 while 块的末尾:

    while (keepGoing && k<2) {
        i++;
        j--;
        k++;
        keepGoing = i<j;  //explicitely recalculate value of keepGoing
    }

【讨论】:

    【解决方案2】:

    这是因为你正在减少整数 j 并增加整数 k。

    while 步骤如下所示:

    1. i = 0,j = 2,k = 0
    2. i = 1,j = 1,k = 1
    3. i = 2,j = 0,k = 2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-06
      • 2022-01-07
      • 2021-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-08
      相关资源
      最近更新 更多