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

标签 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 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/

相关文章:

mysql 使用 while 循环进行选择

sql - T-SQL While 循环和串联

java - 单击 JButton 时显示图像

Java:无法通过反射访问注释

java - OLP CLI 错误 : java. 基础未将 sun.security.util 导出到 JDK 16 下的未命名模块

c++ - C++包含两个整数的代码如何逐步运行?

python - While 循环问题 - Python

c++ - 递归 C++ 函数中 if 与 while 的行为

java - 为什么工具栏中的后退箭头不显示?

java - 无论连接 URL 为何,DriverManager 总是返回我的自定义驱动程序