什么是“ continue”关键字,它在Java中如何工作?


302

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

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

Answers:


416

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

while (getNext(line)) {
  if (line.isEmpty() || line.isComment())
    continue;
  // More code here
}

带有标签,continue将从带有相应标签的循环(而不是最内部的循环)重新执行。这可用于逃避深度嵌套的循环,或者只是为了清楚起见。

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

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

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

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

aLoopName: for (;;) {
  // ...
  while (someCondition)
  // ...
    if (otherCondition)
      continue aLoopName;

513

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

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

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


1
中断并继续的好例子,我认为在>。<之前是相同的
。–

不可能使它成为完美的完美500!+1
帽子

100

让我们来看一个例子:

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

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


28

如果将循环的主体视为子例程,continue则有点像return。C中存在相同的关键字,并且具有相同的用途。这是一个人为的示例:

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

这只会打印出奇数。


16

通常,我将continue(和break)作为警告,指出代码可能会使用某些重构,尤其是在whileor for循环声明没有立即出现的情况下。return在方法中间也是如此,但原因稍有不同。

正如其他人已经说过的那样,continue移至循环的下一个迭代,同时break移出封闭的循环。

这些可能是维护定时炸弹,因为continue/ break与其正在继续/中断的循环之间没有上下文之间的直接链接;添加一个内部循环或将循环的“要点”移到一个单独的方法中,您将隐藏continue/ break失败的效果。

恕我直言,最好将它们用作最后​​的手段,然后确保在循环的开始或结尾将它们的使用紧密地分组在一起,以便下一个开发人员可以在一个屏幕上看到循环的“界限” 。

continuebreakreturn(除了方法结尾处的“一个真实的回报”以外)都属于“隐藏的GOTO”的常规类别。他们将循环和功能控制放在意想不到的地方,然后最终导致错误。


我对退货不好的原因感兴趣。我已经感觉到回报不好,因为Scala不鼓励回报
2016年

1
另一方面,允许方法从深度嵌套的循环中返回可能是最简单,最易读,最合理的处理方式,而不是创建额外的变量只是使循环出口看起来更干净。
David R Tribble,2018年

5

Java中的“ continue”表示转到当前循环的末尾,表示:如果编译器看到循环中的“ continue”,它将转到下一个迭代

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

只要编译器看到继续进入下一个迭代,它将忽略打印代码

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


4

如前所述,continue将跳过对它下面的代码的处理,直到循环结束。然后,将您移至循环的条件,如果该条件仍然成立(或如果存在标志,则为指定的循环的条件),则运行下一个迭代。

必须强调的是,如果do - while您将移动到条件的底部continue,而不是循环的开始。

这就是为什么许多人无法正确回答以下代码将生成什么的原因。

    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%的奇数...您错了!


4

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

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

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为偶数时跳过迭代,而在i为奇数时打印i的值。

Continue语句仅使您退出循环,而无需在循环内执行其余语句,并触发下一次迭代。


3

考虑是否为其他条件。Continue语句执行条件中的内容,然后退出条件,即跳转到下一个迭代或条件。但是,休息就离开了循环。考虑以下程序。'

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。

如果使用break代替continue(if。之后),它将仅打印aa并退出循环

如果满足条件“ bb”等于ss:继续:转到下一个迭代,即“ cc” .equals(ss)。中断:它退出循环并显示“ Out of the loop”。


2
可以肯定的是,由于“ cc”!=“ bb”并且打印语句在break
Ted Delezene的

2

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

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

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

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

它比同等的东西更明显:

while (...)
{ }

绝对比使用像下面这样的空语句更好(更安全)的编码风格:

while (...)
    ;

我绝对同意这是更干净,更易读的代码,但是我不确定我是否遵循您的说法,认为它比其他选择“更安全”。直接使用分号分隔。
axolotl

@Aalok-这比较安全,因为孤独的分号很容易在视觉上错过。意外遗漏也很容易,这将使whilewhile子句的正文成为下一个语句,并且在视觉上不明显。显式continue是显而易见的,它传达了一个空语句不包含的意图。
David R Tribble

我明白了,所以您的意思主要是从设计角度出发。这就说得通了。我对循环的结构方式有所了解。
axolotl



0

当您需要立即跳转到循环的下一个迭代时,在循环控制结构中使用continue语句。

它可以与for循环或while循环一起使用。Java continue语句用于继续循环。它继续程序的当前流程,并在指定条件下跳过其余代码。

如果是内部循环,则仅继续内部循环。

我们可以在所有类型的循环中使用Java Continue语句,例如for循环,while循环和do-while循环。

例如

class Example{
    public static void main(String args[]){
        System.out.println("Start");
        for(int i=0; i<10; i++){
            if(i==5){continue;}
            System.out.println("i : "+i);   
        }
        System.out.println("End.");
    }
}

输出:

Start
i : 0
i : 1
i : 2
i : 3
i : 4
i : 6
i : 7
i : 8
i : 9
End.

[数字5被跳过]

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.