314

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

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

13 回答 13

527

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

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

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

于 2008-12-23T18:54:47.237 回答
424

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

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;
于 2008-12-23T18:53:30.420 回答
104

让我们看一个例子:

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

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

于 2008-12-23T18:56:53.677 回答
28

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

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

这将只打印出奇数。

于 2008-12-23T19:00:30.377 回答
16

通常,我将continue(and ) 视为代码可能break使用一些重构的警告,尤其是在or循环声明不是立即可见的情况下。在方法的中间也是如此,但原因略有不同。whileforreturn

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

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

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

continue, break, 和return(除了方法末尾的 One True Return 之外)都属于“隐藏 GOTO”的一般类别。他们将循环和函数控制放在意想不到的地方,这最终会导致错误。

于 2008-12-23T23:18:08.080 回答
5

Java 中的“continue”表示转到当前循环的结尾,意思是:如果编译器在循环中看到 continue,它将转到下一次迭代

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

每当编译器看到继续进入下一次迭代时,它都会忽略打印代码

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

于 2017-12-19T15:08:33.300 回答
4

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

必须强调的是,如果do - while您在 a 之后移动到底部的条件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% 的奇数......你错了!

于 2016-03-22T18:51:15.970 回答
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语句只是将您带出循环,而不执行循环内的剩余语句并触发下一次迭代。

于 2019-04-19T09:19:37.250 回答
3

考虑一个 If Else 条件。continue 语句执行条件中的内容并退出条件,即跳转到下一个迭代或条件。但是 Break 离开了循环。考虑以下程序。'

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 和 out of the loop

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

于 2016-08-29T16:11:06.540 回答
3

当您需要立即跳转到循环的下一次迭代时,在循环控制结构中使用 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号跳过】

于 2020-03-22T07:05:31.920 回答
2

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

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

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

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

它比等价的更明显:

while (...)
{ }

并且绝对比使用空语句更好(更安全)的编码风格,例如:

while (...)
    ;
于 2017-12-21T23:38:41.347 回答
1

基本上在java中, continue 是一个语句。continue 语句根据特定条件跳转到循环的下一次迭代。

continue 语句通常与循环一起使用以跳过当前迭代。有关如何以及何时在 java 中使用它,请参阅下面的链接。

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

希望能帮助到你 !!

于 2017-10-22T13:38:47.527 回答
0

continue必须在循环内,否则会显示如下错误:

在循环外继续

于 2019-09-15T14:51:38.740 回答