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

问题描述 投票:289回答:11

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

  • 什么是continue关键字?
  • 它是如何工作的?
  • 什么时候使用?
java keyword continue
11个回答
403
投票

没有标签的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;

1
投票

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

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

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

希望能帮助到你 !!


1
投票

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的值。

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


497
投票

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

  • break终止循环(跳转到它下面的代码)。
  • continue终止当前迭代循环中代码处理的其余部分,但继续循环。

96
投票

我们来看一个例子:

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);
}

这将只打印出奇数。


17
投票

一般来说,我认为continue(和break)警告代码可能会使用一些重构,特别是如果whilefor循环声明没有立即出现。 return在方法中间也是如此,但原因略有不同。

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

这些可以是维护时间弹,因为continue / break和它继续/打破除了上下文之外的循环之间没有直接联系;添加一个内循环或将循环的“内脏”移动到一个单独的方法,你有一个隐藏的效果continue / break失败。

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

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


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


3
投票

考虑一个If Else条件。 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 Out of the loop。

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

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


2
投票

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

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

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

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

它比同等的更明显:

while (...)
{ }

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

while (...)
    ;
© www.soinside.com 2019 - 2024. All rights reserved.