当我像这样做一个常规的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是一个很好的霍比特人的名字”
我为x&lt;设置了条件。 2那么如果while循环应该在x == 1处停止,那么“sam”如何打印?
编辑:哦,我现在得到它大声笑我觉得增量是在代码的末尾,开始是0
答案 0 :(得分:1)
这是您的测试用例更符合您的代码:
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
如此迭代。
在第4次迭代之前,number = 2
,这不是<2
所以停止。
因此你得到3次迭代。
您的原始测试用例有正确的想法 - 最好在循环的最后一步增加。这样,您从0
而不是-1
开始,并根据新值而不是之前的值停止循环。
答案 1 :(得分:1)
我会尝试为你追踪它。
第一种情况就是这种情况。
x = 0
is 0 < 2? yes
print 0
0 <- 0 + 1 // here it becomes 1
is 1 < 2? yes
print 1
1 <- 1 + 1 // here it becomes 2
is 2 < 2? no
exit program
第二个循环更像这个
number = -1
is number < 2? yes
number <- -1 + 1 // here it becomes 0
make hobbit "bilbo" at index 0
0 does not equal either 1 or 2
print hobbit at index 0 who is "bilbo"
is 0 < 2? yes
0 <- 0 + 1 // here it becomes 1
number equals 1 so make "frodo" at index 1
print hobbit at index 1 who is "frodo"
is 1 < 2? yes
1 <- 1 + 1 // becomes 2
number equals 2 so make "sam" at index 2
print hobbit at index 2 who is "sam"
is 2 < 2? no
end program
答案 2 :(得分:0)
您可以使用替换
轻松解决此问题int number = -1;
到
int number = 0;
由于! -1 + 1 = 0;
答案 3 :(得分:0)
这种行为没有错。您设置number = -1
,然后执行一个循环,该循环将在number < 2
时进行迭代。所以,-1,0和1.三次迭代。有什么问题?让我们做一个简单的追踪:
number = -1
(-1 < 2)? Yes. Execute code inside while.
number = number + 1 (0)
(0 < 2)? Yes. Execute code inside while.
number = number + 1 (1)
(1 < 2)? Yes. Execute code inside while.
number = number + 1 (2)
(2 < 2)? No. Continue with the next instruction after the while block.
答案 4 :(得分:0)
因为你有3次迭代是真的:
干杯