【问题标题】: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;
此表达式将查看i 和j 的值代码中的那个时刻,将这些变量替换为它们的值(当时分别为 0 和 2),然后就处理比较。由于i 小于j 在代码中的那一刻,它将返回true 并将keepGoing 设置为true。之后,keepGoing 不会在每次 i 或 j 更改时自行更改。这不是它的工作方式。 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 步骤如下所示:
- i = 0,j = 2,k = 0
- i = 1,j = 1,k = 1
- i = 2,j = 0,k = 2