break和continue语句之间的区别


Answers:


530

break留下一个循环,continue跳到下一个迭代。


3
请注意,Java还包含带有不同语义的带标签的continue / break语句:-)
Jay

4
这只是中断和继续的基础。为了更好地解释一下周杰伦的帖子
Xn0vv3r

1
对于那些想知道的人,要使用标签,请在循环前写上标签名称,后跟“:”。
Caelum 2015年

“ break”也将终止switch语句
samsamara

1
会继续跳转到下一个迭代,即使它位于每个循环的if语句中?
klutch

102

有关更多详细信息和代码示例,请参见分支语句

break

break语句有两种形式:带标签的和不带标签的。您在前面对switch语句的讨论中看到了未标记的形式。您也可以使用无标签的中断来终止for,while或do-while循环[...]

无标签的break语句终止for,while或do-while语句的最里面的开关,但带标签的break终止外部的语句。

continue

continue语句跳过for,while或do-while循环的当前迭代。未标记的形式跳到最内层循环主体的末尾,并评估控制该循环的布尔表达式。[...]

带标签的continue语句会跳过标有给定标签的外部循环的当前迭代。


66
System.out.println ("starting loop:");
for (int n = 0; n < 7; ++n)
{
    System.out.println ("in loop: " + n);
    if (n == 2) {
        continue;
    }
    System.out.println ("   survived first guard");
    if (n == 4) {
        break;
    }
    System.out.println ("   survived second guard");
    // continue at head of loop
}
// break out of loop
System.out.println ("end of loop or exit via break");

这将导致以下输出:

starting loop:
in loop: 0
    survived first guard
    survived second guard
in loop: 1
    survived first guard
    survived second guard
in loop: 2
in loop: 3
    survived first guard
    survived second guard
in loop: 4
    survived first guard
end of loop or exit via break

您可以标记一个块,不仅是for循环,然后从嵌套块中断/继续到外部块。在少数情况下,这可能很有用,但总的来说,您将尝试避免使用此类代码,但与以下示例相比,程序的逻辑要容易理解得多:

first:
for (int i = 0; i < 4; ++i) 
{
    second:
    for (int j = 0; j < 4; ++j) 
    {
        third:
        for (int k = 0; k < 4; ++k) 
        {
            System.out.println ("inner start: i+j+k " + (i + j + k));
            if (i + j + k == 5)
                continue third;
            if (i + j + k == 7)
                continue second;
            if (i + j + k == 8)
                break second;
            if (i + j + k == 9)
                break first;
            System.out.println ("inner stop:  i+j+k " + (i + j + k));
        }
    }       
}

因为有可能,但这并不意味着您应该使用它。

如果您想以一种有趣的方式混淆代码,则不要选择一个笨拙的名称,而要选择http:,并在其后加上一个注释,该注释看起来与众不同,就像源代码中的webadress一样:

http://stackoverflow.com/questions/462373
for (int i = 0; i < 4; ++i) 
{
     if (i == 2) 
         break http;

我猜这是来自约书亚·布洛赫(Joshua Bloch)的测验。:)


1
迷惑的好主意,不仅会http://stackoverflow.com/questions/462373/工作吗?
Caelum 2015年

@ user2104648:是的,必须是剪切'n'粘贴错误。
用户未知

28

Break完全离开循环并在循环后执行语句。而Continue保留当前迭代,并使用循环中的下一个值执行。

该代码说明了所有内容:

public static void main(String[] args) {
    for(int i=0;i<10;i++)
    {
        if (i==4)
        {
            break;
        }
        System.out.print(i+"\t");

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

        if (i==4)
        {
            continue;
        }
        System.out.print(i+"\t");
    }
}

输出:

0   1   2   3   
0   1   2   3   5   6   7   8   9

24

break完全退出循环。continuecontinue语句之后跳过语句,并继续循环。


12

违约声明

有时有必要在循环完成对所有步长值的完全迭代之前退出循环。例如,遍历数字列表,直到找到满足特定条件的数字。或者循环遍历文件中的字符流,直到读取特定字符为止。

在下面的示例中,我们使用一个简单的for循环来打印0到9之间的值:

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

输出:

0
1
2
3
4
5
6
7
8
9

现在,如果我们在i == 4时添加一个break语句,则一旦我等于4,我们的代码就会跳出循环。您可以使用break语句来打破for循环,while循环和do-while循环。break语句只会中断当前循环。为了从嵌套的内部循环中跳出外部循环,您需要在break语句中使用标签。

for(int i=0; i<10; i++) {
  System.out.println(i);
  if(i==4) {
    break;
  }
}

输出:

0
1
2
3
4

继续声明

Java的continue语句跳过了循环的当前迭代,直接进入下一个迭代。在for循环中调用continue语句后,循环执行将执行步骤值并评估布尔条件,然后再进行下一次迭代。在下面的示例中,我们将循环打印从0到9的所有值,但是跳过打印出4。

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

输出:

0
1
2
3
5 <---- SKIPPED OVER 4 and continued with next loop iteration
6
7
8
9

循环标签-Break语句 您可以在嵌套循环中使用标签,方法是指定您希望在中断内部循环后继续执行的位置。通常,break语句仅会从最内部的循环中退出,因此,当您想从外部循环中退出时,可以使用标签来完成此操作,本质上可以执行类似于goto语句的操作。

以下示例使用3个循环,所有循环相互嵌套。由于无法从最内层循环中完全脱离最外层循环,因此我们可以使用标签“ outer1”来完成此操作,并在break语句旁边指定标签。

outer1:
for(int i=0; i<5; i++) {
  for(int j=0; j<4; j++) {
    for(int k=0; k<2; k++) {
      System.out.println("[" + i + "][" + j + "][" + k + "]");
      if(j == 3) {
        break outer1;
      }
    }
  }
}

输出:

[0][0][0]
[0][0][1]
[0][1][0]
[0][1][1]
[0][2][0]
[0][2][1]
[0][3][0]

请注意,最后显示的行是如何“ 0 [0]”的,这里j == 3,这就是我们所说的“ break outside1;”。打破最外部的循环。

循环标签-Continue语句

您还可以将标签与continue关键字一起使用,以从特定点继续循环。以前面的示例为例,仅更改一行以指定,continue outer1;而不是break outer1;将导致循环从outer1标签继续循环而不是脱离循环。请注意,每次continue outer1;调用时,代码将循环索引i加1后从外部循环继续。

outer1:
for(int i=0; i<5; i++) {
  for(int j=0; j<4; j++) {
    for(int k=0; k<2; k++) {
      System.out.println("[" + i + "][" + j + "][" + k + "]");
      if(j == 3) {
        continue outer1;
    }
  }
}

[0][0][0]
[0][0][1]
[0][1][0]
[0][1][1]
[0][2][0]
[0][2][1]
[0][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[1][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[1][0][1]
[1][1][0]
[1][1][1]
[1][2][0]
[1][2][1]
[1][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[2][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[2][0][1]
[2][1][0]
[2][1][1]
[2][2][0]
[2][2][1]
[2][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[3][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[3][0][1]
[3][1][0]
[3][1][1]
[3][2][0]
[3][2][1]
[3][3][0] <---- CONTINUE WITH LABEL CALLED HERE
[4][0][0] <---- CONTINUES FROM NEXT ITERATION OF OUTER LOOP
[4][0][1]
[4][1][0]
[4][1][1]
[4][2][0]
[4][2][1]
[4][3][0]

资料来源:Java中的循环–终极指南


7

简单而准确的优秀答案

我将添加一个代码示例。

C:\oreyes\samples\java\breakcontinue>type BreakContinue.java

    class BreakContinue {

        public static void main( String [] args ) {

               for( int i = 0 ; i < 10 ; i++ ) {

                     if( i % 2 == 0) { // if pair, will jump
                         continue; // don't go to "System.out.print" below.
                     }

                     System.out.println("The number is " + i );

                     if( i == 7 ) {
                         break; // will end the execution, 8,9 wont be processed
                      }

               }
        }

    }

C:\oreyes\samples\java\breakcontinue>java BreakContinue
The number is 1
The number is 3
The number is 5
The number is 7

6

一个break语句会导致其适用的声明终止(switchfordo,或while)。

一条continue语句用于结束当前循环迭代,并将控制权返回给该循环语句。


5

continue跳过执行当前回路移动到下一个循环,而break 移出了的循环和执行下一条语句循环。我使用以下代码了解了差异。检查不同的输出。希望这会有所帮助。

public static void main(String[] args) {
    for(int i = 0; i < 5; i++){
        if (i == 3) {
            continue;
        }
        System.out.print(i);
    }
}//prints out 0124, continue moves to the next iteration skipping printing 3

public static void main(String[] args) {
    for(int i = 0; i < 5; i++){
        if (i == 3) {
            break;
        }
        System.out.print(i);
    }
}//prints out 012, break moves out of the loop hence doesnt print 3 and 4

4

考虑以下:

int n;
for(n = 0; n < 10; ++n) {
    break;
}
System.out.println(n);

break导致循环终止,n的值为0。

int n;
for(n = 0; n < 10; ++n) {
    continue;
}
System.out.println(n);

继续会使程序计数器返回到循环的第一行(检查条件,n的值为递增),n的最终值为10。

还应注意,break仅终止其内的循环的执行:

int m;
for(m = 0; m < 5; ++m)
{
    int n;
    for(n = 0; n < 5; ++n) {
        break;
    }
    System.out.println(n);
}
System.out.println(m);

将输出一些效果

0
0
0
0
0
5

1
您的示例中存在变量范围界定问题。
达伦(Darron)

3

break语句退出循环(下一条要执行的语句是右括号之后的第一个语句),同时continue在下一次迭代时重新开始循环。


2

break语句存在当前的循环控制结构,并且在continue退出时也跳至其后,但又跳回到循环条件。


2

简单的例子:

break 离开循环。

int m = 0;
for(int n = 0; n < 5; ++n){
  if(n == 2){
    break;
  }
  m++;
}

System.out.printl("m:"+m); // m:2

continue 将返回到启动循环。

int m = 0;
for(int n = 0; n < 5; ++n){
  if(n == 2){
    continue; // Go back to start and dont execute m++
  }
  m++;
}

System.out.printl("m:"+m); // m:4

2

为了防止在满足条件的情况下执行任何操作,应使用continue;而在满足条件的情况下退出循环,则应使用break。

例如,在下面提到的代码中。

 for(int i=0;i<5;i++){

        if(i==3){

           continue;

        }
       System.out.println(i);
     }

上面的代码将打印结果:0 1 2 4

现在考虑此代码

 for(int i=0;i<5;i++){


            if(i==3){

                break;

            }
            System.out.println(i);
         }

该代码将打印0 1 2

那是continue和break的基本区别。


1

这是break的含义:

int[] a = new int[] { 1, 3, 4, 6, 7, 9, 10 };
// find 9
for(int i = 0; i < a.Length; i++)
{
    if (a[i] == 9) 
        goto goBreak;

    Console.WriteLine(a[i].ToString());      
}
goBreak:;

这是continue的含义:

int[] a = new int[] { 1, 3, 4, 6, 7, 9, 10 };
// skip all odds
for(int i = 0; i < a.Length; i++)
{
    if (a[i] % 2 == 1) 
        goto goContinue;

    Console.WriteLine(a[i].ToString());      

goContinue:;
}

C#没有休息吗?并继续;陈述?我不敢相信
2009年

是的,C#有,我只解释break并继续的语义:-)
Michael Buen

1
您什么也没解释,只是发布了一些代码。甚至没有注释代码。一段代码不是解释,也不是“语义”。
罗恩侯爵,2015年

1

首先,我想您应该知道Java中有两种中断和继续类型,分别是标记为break,unlabeled break,labeledcontinue和unlabeledcontinue。现在,我将讨论它们之间的区别。

class BreakDemo {
public static void main(String[] args) {

    int[] arrayOfInts = 
        { 32, 87, 3, 589,
          12, 1076, 2000,
          8, 622, 127 };
    int searchfor = 12;

    int i;
    boolean foundIt = false;

    for (i = 0; i < arrayOfInts.length; i++) {
        if (arrayOfInts[i] == searchfor) {
            foundIt = true;
            break;//this is an unlabeled break,an unlabeled break statement terminates the innermost switch,for,while,do-while statement.
        }
    }

    if (foundIt) {
        System.out.println("Found " + searchfor + " at index " + i);
    } else {
        System.out.println(searchfor + " not in the array");
    }
}

未标记的break语句终止最里面的switch,for,while,do-while语句。

public class BreakWithLabelDemo {
public static void main(String[] args) {
    search:
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 5; j++) {
            System.out.println(i + " - " + j);
            if (j == 3)
                break search;//this is an labeled break.To notice the lab which is search.
        }
    }
}

带标签的中断将终止一条外部语句。如果您使用javac和java进行此演示,则会得到:

0 - 0
0 - 1
0 - 2
0 - 3
class ContinueDemo {
public static void main(String[] args) {

    String searchMe = "peter piper picked a " + "peck of pickled peppers";
    int max = searchMe.length();
    int numPs = 0;

    for (int i = 0; i < max; i++) {
        // interested only in p's
        if (searchMe.charAt(i) != 'p')
            continue;//this is an unlabeled continue.

        // process p's
        numPs++;
    }
    System.out.println("Found " + numPs + " p's in the string.");
}

未标记的continue语句跳过for,while,do-while语句的当前迭代。

public class ContinueWithLabelDemo {
public static void main(String[] args) {
    search:
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 5; j++) {
            System.out.println(i + " - " + j);
            if (j == 3)
                continue search;//this is an labeled continue.Notice the lab which is search
        }
    }
}

带有标记的continue语句跳过标有给定标签的外部循环的当前迭代,如果您使用javac和java demo,您将获得:

0 - 0
0 - 1
0 - 2
0 - 3
1 - 0
1 - 1
1 - 2
1 - 3
2 - 0
2 - 1
2 - 2
2 - 3

如有任何疑问,您可以查看Java教程:在此处输入链接描述


0

简而言之:break将终止当前循环,并在循环结束后在第一行继续执行。Continue跳回到循环条件并继续运行循环。


在循环之后的第一个语句
罗恩侯爵,2015年

0
for (int i = 1; i <= 3; i++) {
        if (i == 2) {

            continue;
        }
        System.out.print("[i:" + i + "]");

在netbeans中尝试此代码,您将了解Break和Continue之间的区别

for (int i = 1; i <= 3; i++) {
        if (i == 2) {

            break;
        }
        System.out.print("[i:" + i + "]");

0

简单的程序,了解继续和中断之间的区别

什么时候continue使用

    public static void main(String[] args) {
    System.out.println("HelloWorld");
    for (int i = 0; i < 5; i++){
        System.out.println("Start For loop i = " + i);
        if(i==2){
            System.out.println("Inside if Statement for i = "+i);
           continue;
        }
        System.out.println("End For loop i = " + i);
    }
    System.out.println("Completely out of For loop");
}


OutPut:
HelloWorld
Start For loop i = 0
End For loop i = 0
Start For loop i = 1
End For loop i = 1
Start For loop i = 2
Inside if Statement for i = 2
Start For loop i = 3
End For loop i = 3
Start For loop i = 4
End For loop i = 4
Completely out of For loop

什么时候break使用

public static void main(String[] args) {
    System.out.println("HelloWorld");
    for (int i = 0; i < 5; i++){
        System.out.println("Start For loop i = " + i);
        if(i==2){
            System.out.println("Inside if Statement for i = "+i);
           break;
        }
        System.out.println("End For loop i = " + i);
    }
    System.out.println("Completely out of For loop");
}

Output:
HelloWorld
Start For loop i = 0
End For loop i = 0
Start For loop i = 1
End For loop i = 1
Start For loop i = 2
Inside if Statement for i = 2
Completely out of For loop

0

Continue Statment停止迭代并开始下一个迭代Ex:

System.out.println("continue when i is 2:");
    for (int i = 1; i <= 3; i++) {
        if (i == 2) {
            System.out.print("[continue]");
            continue;
        }
        System.out.print("[i:" + i + "]");
    }

和Break Statment停止循环或退出循环


-1

因此,您处于for或while循环中。使用中断;将您带入循环之外。如上,它将结束。继续; 会告诉它运行下一个迭代。

在if语句中使用continue没有意义,但是要中断;是有用的。在switch ...情况下,请始终使用break;结束一个案例,因此它不会执行另一个案例。


1
“在if语句中使用continue没有意义 -是的,这确实有意义。例如,当满足条件时,您可以在实际的迭代步骤中跳过一些处理部分。
Sk8erPeter

它不仅毫无意义,而且是非法,除非if是一个循环,在这种情况下,有很多点内。
罗恩侯爵,2015年
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.