当前位置:  开发笔记 > 编程语言 > 正文

break和continue语句之间的区别

如何解决《break和continue语句之间的区别》经验,为你挑选了9个好方法。

谁能告诉我breakcontinue声明之间的区别?



1> Xn0vv3r..:

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


这只是休息和继续的基础.有关Jay's Post的更好解释
请注意,Java还包含带有不同语义的标记的continue/break语句:-)

2> Jay..:

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

break

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

未标记的break语句终止最内层的switch,for,while或do-while语句,但带标签的break终止外部语句.

continue

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

标记的continue语句跳过标记有给定标签的外循环的当前迭代.



3> user unknown..:
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;

我猜这是来自约书亚布洛赫的一个quizzle.:)



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> jsight..:

break完全退出循环.continuecontinue语句之后跳过语句并保持循环.



6> gomisha..:

休息声明

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

在下面的示例中,我们使用一个简单的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语句只会从最内层循环中断开,所以当你想要打破外部循环时,你可以使用标签来完成这个,基本上做类似于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]

来源:Java中的循环 - 终极指南



7> OscarRyz..:

优秀的答案简单而准确.

我会添加一个代码示例.

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



8> Warrior..:

一个break在声明终止语句结果其所适用(switch,for,do,或while).

一个continue语句用来结束本次循环,并返回控制循环语句.



9> Abdullah Kha..:

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

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有