break和continue语句的区别

Posted

技术标签:

【中文标题】break和continue语句的区别【英文标题】:Difference between break and continue statement 【发布时间】:2010-10-02 12:28:30 【问题描述】:

谁能告诉我breakcontinue 语句之间的区别?

【问题讨论】:

【参考方案1】:

break 离开循环,continue 跳转到下一个迭代。

【讨论】:

请注意,Java 还包含标记的 continue/break 语句,它们具有不同的语义:-) 这只是中断和继续的基础。如需更好的解释,请查看 Jay 的帖子 对于那些想知道要使用标签的人,您可以在循环前写下标签名称,后跟“:”。 "break" 也会终止 switch 语句 是否会继续跳转到下一个迭代,即使它在 for each 循环内的 if else 语句中?【参考方案2】:

更多细节和代码示例请见Branching Statements

break

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

无标签的 break 语句终止最里面的 switch,因为, while 或 do-while 语句,但带标签的 break 会终止外部 声明。

continue

continue 语句跳过了 for, while , 的当前迭代 或 do-while 循环。未标记的表单跳到最里面的末尾 循环体并计算控制循环的布尔表达式 环形。 [...]

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

【讨论】:

【参考方案3】:
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: 并在它后面加上一个看起来很陌生的评论,就像源代码中的一个网络地址:

http://***.com/questions/462373
for (int i = 0; i < 4; ++i) 

     if (i == 2) 
         break http;

我猜这是来自 Joshua Bloch 的测验。 :)

【讨论】:

这个混淆的好主意,不只是让http://***.com/questions/462373/ 工作吗? @user2104648: 是的,那一定是剪切'n'粘贴错误。 @john:你为什么不测试一下然后告诉我们?【参考方案4】:

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

【讨论】:

【参考方案5】:

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

【讨论】:

【参考方案6】:

中断声明

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

在下面的例子中,我们使用一个简单的 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 语句,我们的代码将在 i 等于 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 statement 跳过循环的当前迭代并直接进入下一个迭代。在 for 循环中调用 continue 语句后,循环执行将执行 step 值并评估布尔条件,然后继续进行下一次迭代。在下面的例子中,我们在一个循环中打印出从 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

循环标签 - 中断语句 您可以使用labels within nested loops,通过指定您希望在中断内部循环后继续执行的位置。通常,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 outer1;”跳出最外层的循环。

循环标签 - 继续语句

您还可以使用带有 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]

来源:Loops in Java – Ultimate Guide

【讨论】:

【参考方案7】:

break 语句会导致其应用的语句终止(switchfordowhile)。

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

【讨论】:

【参考方案8】:

Excellent answer简单准确。

我会添加一个代码示例。

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

【讨论】:

【参考方案9】:

continue 跳过当前正在执行的 loopMOVES TO 下一个 loopbreak MOVES OUT > 循环 并在循环之后执行下一个语句。 我使用以下代码了解了差异。查看不同的输出。希望这会有所帮助。

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

【讨论】:

【参考方案10】:

考虑以下几点:

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

continue 使程序计数器返回到循环的第一行(检查条件,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

【讨论】:

您的示例中存在变量范围问题。【参考方案11】:

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

【讨论】:

【参考方案12】:

break 语句存在当前循环控制结构并跳到它后面,而continue 也退出但跳回到循环条件。

【讨论】:

【参考方案13】:

简单示例:

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

【讨论】:

【参考方案14】:

为了防止在满足条件时执行任何操作,应该使用 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 的基本区别。

【讨论】:

【参考方案15】:

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# 没有中断;并继续;陈述?我不敢相信。 是的 C# 有,我只是解释一下 break 和 continue 的语义:-) 你没有解释什么,你只是发布了一些代码。甚至没有注释代码。一段代码不是解释,也不是“语义”。【参考方案16】:

首先,我想你应该知道Java中有两种类型的break和continue,分别是labeled break、unlabeled break、labeled continue和unlabeled continue。下面我来谈谈它们之间的区别。

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.
        
    

一个带标签的break终止一个外部语句。如果你javac和java这个demo,你会得到:

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 演示,你会得到:

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教程:enter link description here

【讨论】:

【参考方案17】:

简单地说:break 将终止当前循环,并在循环结束后的第一行继续执行。 continue 跳回循环条件并继续运行循环。

【讨论】:

循环后的第一个语句【参考方案18】:
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 + "]");

【讨论】:

【参考方案19】:

理解 continue 和 break 区别的简单程序

当使用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

【讨论】:

【参考方案20】:

Continue 语句停止迭代并开始下一个迭代 例如:

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 停止循环或退出循环

【讨论】:

【参考方案21】:

所以你在一个 for 或 while 循环中。使用中断;会让你脱离循环。就像,它会结束。继续;将告诉它运行下一次迭代。

在 if 语句中使用 continue 没有意义,但是 break;很有用。 在 switch...case 中,总是使用 break;结束一个案例,因此它不会执行另一个案例。

【讨论】:

“在 if 语句中使用 continue 没有意义” - 是的,它确实有意义。例如,当满足某个条件时,您可以在实际迭代步骤中跳过一些处理部分。 这不仅没有意义而且是非法的,除非if在一个循环中,在这种情况下有很多意义。

以上是关于break和continue语句的区别的主要内容,如果未能解决你的问题,请参考以下文章

break和continue语句的区别

JAVA里break和continue和return的区别

break和continue 的区别

shell编程continue break 函数的return

break和continue的区别和用法

break语句与continue语句