为什么这个while循环在满足条件后运行?

时间:2016-08-16 23:02:02

标签: java while-loop

当我像这样做一个常规的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

5 个答案:

答案 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次迭代是真的:

  • -1&lt; 2 == true
  • 0&lt; 2 == true
  • 1&lt; 2 == true
  • 2&lt; 2 == false

干杯