当我像这样执行常规 while 循环时
int x = 0;
while (x < 2) {
System.out.println(x);
x = x + 1;
}
打印
0
1
但是第二个 while 循环在满足条件后又运行一次。
class Hobbits {
String name;
public static void main(String [] args) {
Hobbits [] which = new Hobbits[3];
int number = -1;
while (number < 2) {
number = number + 1;
which[number] = new Hobbits();
which[number].name = "bilbo";
if (number == 1) {
which[number].name = "frodo";
}
if (number == 2) {
which[number].name = "sam";
}
System.out.print(which[number].name + " is a ");
System.out.println("good Hobbit name");
}
}
}
所以结果是
bilbo is a good Hobbit name
frodo is a good Hobbit name
sam is a good Hobbit name
它不应该停止打印“frodo is a good Hobbit name”
我设置了 x < 2 的条件,那么如果 while 循环应该在 x == 1 处停止,“sam”如何打印?
编辑:哦哦,我现在明白了,哈哈,我在想增量是在代码的末尾,而开头是 0
最佳答案
这是与您的代码更匹配的测试用例:
class Test {
public static void main(String[] args) {
int x = -1;
while (x < 2) {
x = x + 1;
System.out.println(x);
}
}
}
它确实打印:
$ java Test
0
1
2
您的循环并未设计为在 number
时停止。是 2,如果数字是 2,它会在下一次迭代之前停止。因为您递增 number
在循环的早期,它将继续使用该值,直到选择是否再次迭代为止。
在第一次迭代之前,
number = -1
这是<2
所以它应该迭代。在第二次迭代之前,
number = 0
,即<2
如此迭代。在第三次迭代之前,
number = 1
,即<2
如此迭代。第四次迭代之前,
number = 2
,这不是<2
所以停下来吧。
因此您会得到 3 次迭代。
您最初的测试用例有正确的想法——最好将增量作为循环的最后一步。这样,您就可以从 0
开始。而不是-1
,然后根据新值而不是之前的值停止循环。
关于java - 为什么这个 while 循环在满足条件后才运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38985749/