当前位置: 首页 > 知识库问答 >
问题:

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

越学文
2023-03-14

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

“佛罗多是一个很好的霍比特人的名字”难道它不应该停止印刷吗

我设置了x的条件

编辑:哦,我现在明白了,哈哈,我想增量是在代码的末尾,开始是0

共有3个答案

颜功
2023-03-14

这种行为没有错。您设置number=-1,然后执行一个循环,循环将迭代number

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.

华凡
2023-03-14

我会尽力帮你查一查。

第一种情况就是这样。

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
宋唯
2023-03-14

以下是与代码更为匹配的测试用例:

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

    在第二次迭代之前,number=0,也就是

    在第三次迭代之前,number=1,即

    在第四次迭代之前,number=2,这不是

    因此得到3次迭代。

    您最初的测试用例有一个正确的想法——最好在循环的最后一步增加。这样,您从0开始,而不是从-1开始,然后根据新值而不是以前的值停止循环。

  •  类似资料:
    • 我写了一个代码,获取用户对开始日期的输入

    • 我试图用Python做一个简单的计算器。 我希望用户写“and”,然后while循环应该结束。当我运行它并输入随机文本时,while循环工作并显示“重试”。然而,当我实际输入正确答案(“add”)时,while循环并没有结束——相反,它一直在说“再试一次”。 为什么会这样?我的代码怎么了?

    • 我有一个项目,我的方法得到两个日期,它不断地向方法添加一天,直到两个日期相等,然后您可以通过查看一天添加了多少次来查看日期相距有多远。我的问题是,当满足日条件时,即使日、月和年必须都相同才能停止工作,我的while循环也会退出

    • 尝试编写一个程序,其中用户输入他们一周的费用。麻烦在于我希望程序重新询问用户是否输入了不可接受的输入。我想出了如何检测负值的方法,但是当尝试捕获输入不匹配异常(如果像输入字符或字符串一样)时,循环只是无限运行,要求“星期一费用:”我如何使它,以便用户有另一个回答的机会?我试着Rest一下;但是这也打破了做而循环,我不想要。 这是我目前为止的代码: 谢谢你的帮助

    • 我正在尝试使用一个do while循环来找出用户是想将一只狗还是一只猫检查到Java的养狗系统中。其思想是,当提示时输入“dog”或“cat”,任何输入都将导致错误,并且他们将再次被提示输入文件名。 如果输入了“cat”或“dog”,那么将为程序分配等效的文件(dogs.txt或cats.txt),然后系统将运行并将数据加载到程序中。 以下是当前的变量: 以及导致问题的方法: 下面是运行代码时打印