break和continue语句的区别
Posted
技术标签:
【中文标题】break和continue语句的区别【英文标题】:Difference between break and continue statement 【发布时间】:2010-10-02 12:28:30 【问题描述】:谁能告诉我break
和continue
语句之间的区别?
【问题讨论】:
【参考方案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
语句会导致其应用的语句终止(switch
、for
、do
或 while
)。
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
跳过当前正在执行的 loop 并 MOVES TO 下一个 loop 而 break
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语句的区别的主要内容,如果未能解决你的问题,请参考以下文章