为什么打印0?

时间:2016-12-10 15:55:30

标签: java while-loop boolean

为什么答案为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

2 个答案:

答案 0 :(得分:1)

您可能会这样说,因为您认为keepGoing变量将停止循环... 那么keepGoing变量根本没有变化!您使用以下方法实例化了变量:

boolean keepGoing;
keepGoing = i<j;

此表达式将在代码中查看ij 的值,将这些变量替换为它们的值(此时分别为0和2) ),只是处理比较。由于i在代码中当时小于j ,因此它将返回true并将keepGoing设置为true。之后,keepGoing每次ij更改时都不会自行更改。{1}}这不是它的工作原理。 keepGoing的值只有在您设置其他值时才会更改! 一般情况下,变量只会在遇到明确的行(或方法)时才会发生变化。因此,如果您希望{J}每次更改时都需要更改keepGoing ij,每次发生时,您都必须明确重新计算keepGoing。在您的情况下,这将在while块的末尾:

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

答案 1 :(得分:0)

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

while步骤如下:

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