为什么需要在 Java while 循环中使用 "break" 和 "continue" 语句?

Why is it necessary to use "break" and "continue" statements in Java while loops?

当我创建一个 Java while 循环并在其中包含 if/else 语句(包括在下面)时,为什么需要使用 break;continue; 语句来继续代码?

我注意到,如果没有 break; 语句,它只会无限显示 else 结果。

例如,为什么代码运行直接来自else语句?

我知道 break 和 continue 是做什么的,我只是需要更好地了解它们的用法。

public class TheClass {

    public static void main(String[] args) {

        int x = 0;
        while (x <= 21){
            if(x < 21){
                System.out.println("You cannot drink because you are only " + x + " years old.");
                x++;
                continue;
            }else{
                System.out.println("You may drink because you are " + x + " years old.");
                break;
            }
        }

    }

}

简单:else 分支不更新x

因此你陷入了死循环。 break breaks 防止无限循环。

你从 x 开始是 0。0 小于 21 - 因此你增加 x 的代码永远不会被采用。您可能想将条件更改为

if (x <= 21) 

一般情况下:您使用 continue/break 以防简单的计数或 while(some-condition) 是不够的。含义:这些关键字只是为了允许跳跃 "out of loop execution"。立即结束循环(break);或者通过中止 current 循环体并希望进入下一个循环迭代(继续)。

"break" 的一个很好的例子是:

Value searchResult = null;
for (Value bar : items) {
  if (bar.equals(whatever)) {
    searchResult = bar;
    break;
  }
} 

找到匹配项时无需比较其他元素 - 因此可以中断(目标是找到 第一个 匹配项)。

int x = 0;
这很正常,这里没什么可看的。
while (x <= 21) {
好的,现在我们知道整个时间 x 小于或等于 21,while 循环就会执行。这意味着 x 将取值为 22 以退出循环。

```

if(x < 21){
    System.out.println("You cannot drink because you are only " + x + " years old.");
    x++;
    continue;
}

```

现在,当且仅当我们处于 while 循环的前 21 次迭代(即 x < 21)时,进行打印语句并递增 x。在这里,continue 实际上没有做任何事情,可以删除而不会产生任何不良后果。这是因为这个循环中唯一的其他语句是一个 else 循环,所以无论如何它都不会执行。 ```

else { // If x >= 21
    System.out.println("You may drink because you are " + x + " years old.");
    break;
}

``` 现在,如果 x 不小于 21,我们将打印并退出循环。之所以需要这个break,是因为x在第一次进入循环的时候会是21。然而,while 循环中的条件允许 x=21 -- 结果,我们必须手动 break 退出循环。

这可以简单地用 x++; 代替,我认为这是更好的做法。

Why is it Necessary To Use “break” and “continue” Statements In Java While Loops?

没有。
仅当您的语句不足以涵盖您要应用的逻辑时,才需要使用 breakcontinue
这并不意味着它一定不好,但有时它会被过度使用,没有它代码可能会更简单。
例如看你的代码。

1)continue无奈
if 语句之后,循环继续。这正是 continue 的作用。 如果您在 else 语句之后有一些语句并且您不会执行,那将是有意义的,但事实并非如此。

2) break 也可以删除。
你中断是因为 while 条件没有考虑循环结束。
虽然 x < 21x 递增,但由于 x 之后保持此值,所以 while (x <= 21){ 永远是真的。

所以你必须想办法退出方块while以避免无限循环。
你这样做 breakelse.

如果 while 条件处理退出条件,您可以在没有 break 的情况下编写相同的逻辑。
您可以通过引入一个 boolean 变量来做到这一点,该变量提供了一种在达到预期年龄时退出循环的自然方式:

int x = 0;
boolean isAgeReached = false;

while (!isAgeReached) {
    if (x < 21) {
      System.out.println("You cannot drink because you are only " + x + " years old.");
      x++;

    } 
     else {
       System.out.println("You may drink because you are " + x + " years old.");
       isAgeReached = true;
    }
}

或者更简单:

int x = 0;
while (x < 21) {
    System.out.println("You cannot drink because you are only " + x + " years old.");
    x++;
}

System.out.println("You may drink because you are " + x + " years old.");