break语句和continue语句的区别

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

506498 次浏览

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

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

break语句会导致它所应用的语句(switchfordo,或while)的终止。

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

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

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

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

更多细节和代码示例参见< >强分支语句< / >强:

break

break语句有两种形式:有标记的和无标记的。你们看到了 switch语句中未标记的形式。你 还可以使用未标记的中断来终止for, while或do-while吗 循环[…]< / p >

一个未标记的break语句终止最里面的开关,为, While或do-while语句,但是标记的break终止了外层语句 声明。< / p >

continue

continue语句跳过for的当前迭代, 或者do-while循环。未标记的表单跳转到最内层的末尾 对象的布尔表达式求值 循环。[…]< / p >

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

下面是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:\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

你在一个for或while循环中。使用打破;就会把你排除在外。也就是说,它会结束。继续;将告诉它运行下一次迭代。

在if语句中使用continue语句没有意义,但需要中断;是有用的。 在开关……Case,总是用破;

.结束一个case,使它不再执行另一个case

考虑以下几点:

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

打破导致循环终止,并且n的值为0。

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

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

还应该注意,打破只终止它所在循环的执行:

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

简单的例子:

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
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://stackoverflow.com/questions/462373
for (int i = 0; i < 4; ++i)
{
if (i == 2)
break http;

我猜这是约书亚·布洛赫做的小测验。:)

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 + "]");

Break完全离开循环,并在循环之后执行语句。 而Continue则离开当前迭代并执行循环中的下一个值。< / p >

这段代码解释了一切:

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

首先,我认为你应该知道在Java中有两种类型的中断和继续,即有标记的中断,无标记的中断,有标记的继续和无标记的继续。现在,我将谈谈它们之间的区别。

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语句终止最里面的开关、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这个演示,你会得到:

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教程

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

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

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

Continue语句停止滴定并开始下一次滴定 例:< / p >

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

为了在满足条件时阻止执行任何东西,应该使用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 12

这就是continue和break的基本区别。

Break语句

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

在下面的例子中,我们使用一个简单的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的继续声明跳过循环的当前迭代,直接进入下一个迭代。在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

循环标签中断语句 你可以使用嵌套循环中的标签来指定在跳出内部循环后继续执行的位置。通常,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中的循环-终极指南