什么是“continue”关键字以及它如何在Java中运行?

What is the “continue” keyword and how does it work in Java?

我第一次看到这个关键字,我想知道是否有人可以向我解释它的作用。

  • 什么是continue关键字?
  • 它是如何工作的?
  • 什么时候使用?

continue有点像goto。你熟悉break吗?相比之下,更容易思考它们:

  • break终止循环(跳转到它下面的代码)。

  • continue终止当前迭代循环中代码的其余处理,但继续循环。


没有标签的continue语句将从最里面的whiledo循环的条件以及最里面的for循环的更新表达式重新执行。它通常用于提前终止循环的处理,从而避免深度嵌套的if语句。在下面的示例中,continue将获取下一行,而不在循环中处理以下语句。

1
2
3
4
5
while (getNext(line)) {
  if (line.isEmpty() || line.isComment())
    continue;
  // More code here
}

使用标签,continue将从具有相应标签的循环重新执行,而不是最内层循环。这可以用于逃避深层嵌套循环,或者仅为了清楚起见。

有时continue也用作占位符,以使空循环体更清晰。

1
2
for (count = 0; foo.moreData(); count++)
  continue;

C和C ++中也存在没有标签的相同语句。 Perl中的等价物是next

建议不要使用这种类型的控制流,但如果您这样选择,也可以使用continue来模拟有限形式的goto。在以下示例中,continue将重新执行空for (;;)循环。

1
2
3
4
5
6
aLoopName: for (;;) {
  // ...
  while (someCondition)
  // ...
    if (otherCondition)
      continue aLoopName;


我们来看一个例子:

1
2
3
4
5
6
int sum = 0;
for(int i = 1; i <= 100 ; i++){
    if(i % 2 == 0)
         continue;
    sum += i;
}

这将得到从1到100的奇数之和。


如果您将循环体视为子例程,continue就像return。 C中存在相同的关键字,并且用于相同的目的。这是一个人为的例子:

1
2
3
4
5
6
for(int i=0; i < 10; ++i) {
  if (i % 2 == 0) {
    continue;
  }
  System.out.println(i);
}

这将只打印出奇数。


通常,我将continue(和break)视为代码可能使用某些重构的警告,尤其是在whilefor循环声明未立即显示的情况下。对于方法中间的return也是如此,但原因略有不同。

正如其他人已经说过的那样,continue移动到循环的下一次迭代,而break移出封闭循环。

这些可以是维护时间弹,因为continue / break与循环之间没有直接链接,它继续/断开而不是上下文;添加一个内部循环或将循环的"内脏"移动到一个单独的方法中,你有continue / break失败的隐藏效果。

恕我直言,最好将它们作为最后的手段,然后确保它们的使用在循环的开始或结束时紧密组合在一起,以便下一个开发人员可以在一个屏幕中看到循环的"边界" 。

continuebreakreturn(除了方法结束时的One True Return)都属于"隐藏GOTO"的一般类别。它们将循环和函数控制置于意外的位置,最终导致错误。


Java中的"continue"意味着转到当前循环的结尾,
意味着:如果编译器在循环中看到继续,它将进入下一次迭代

示例:这是用于打印1到10的奇数的代码

只要看到继续进入下一次迭代,编译器就会忽略打印代码

1
2
3
4
for (int i = 0; i < 10; i++) {
    if (i%2 == 0) continue;    
    System.out.println(i+"");
}


如前所述,continue将跳过处理它下面的代码,直到循环结束。然后,如果此条件仍然成立(或者如果有一个标志,则表示循环的条件),您将被移动到循环的条件并运行下一次迭代。

必须强调的是,在do - while的情况下,您将在continue之后移动到底部的条件,而不是在循环开始时。

这就是为什么很多人都无法正确回答以下代码将生成的内容。

1
2
3
4
5
6
7
8
9
10
    Random r = new Random();
    Set<Integer> aSet= new HashSet<Integer>();
    int anInt;
    do {
        anInt = r.nextInt(10);
        if (anInt % 2 == 0)
            continue;
        System.out.println(anInt);
    } while (aSet.add(anInt));
    System.out.println(aSet);

*如果你的答案是aSet只包含100%的奇数......你错了!


考虑一个If Else条件。 continue语句执行条件中的内容并退出条件,即跳转到下一个迭代或条件。但是休息离开了循环。
请考虑以下计划。"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class ContinueBreak {
    public static void main(String[] args) {
        String[] table={"aa","bb","cc","dd"};
        for(String ss:table){
            if("bb".equals(ss)){
                continue;
            }
            System.out.println(ss);
            if("cc".equals(ss)){
                break;
            }
        }
        System.out.println("Out of the loop.");
    }

}

它将打印:aa cc Out of the loop。

如果你使用break代替continue(After if。),它只会打印aa并退出循环。

如果满足条件"bb"等于ss:
对于继续:它进入下一次迭代,即"cc".equals(ss)。
对于Break:它出自循环并打印出"Out of the loop"。


Continue是Java中的关键字,用于跳过当前迭代。

假设您要打印从1到100的所有奇数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Main {

    public static void main(String args[]) {

    //Program to print all odd numbers from 1 to 100

        for(int i=1 ; i<=100 ; i++) {
            if(i % 2 == 0) {
                continue;
            }
            System.out.println(i);
        }

    }
}

上面程序中的continue语句只是在我是偶数时跳过迭代,并在奇数时打印i的值。

Continue语句只是将您带出循环而不执行循环内的其余语句并触发下一次迭代。


我参加聚会有点晚了,但......

值得一提的是,continue对于空循环很有用,其中所有工作都是在控制循环的条件表达式中完成的。例如:

1
2
while ((buffer[i++] = readChar()) >= 0)
    continue;

在这种情况下,读取字符并将其附加到buffer的所有工作都是在控制while循环的表达式中完成的。 continue语句用作循环不需要正文的可视指示符。

它比同等的更明显:

1
2
while (...)
{ }

并且肯定比使用如下的空语句更好(和更安全)的编码风格:

1
2
while (...)
    ;


基本上在java中,continue是一个声明。因此,continue语句通常与循环一起使用以跳过当前迭代。

有关如何以及何时在java中使用它,请参阅下面的链接。它有例子说明。

https://www.flowerbrackets.com/continue-java-example/

希望能帮助到你 !!