有人能告诉我break
和continue
陈述之间的区别吗?
答案 0 :(得分:478)
break
离开循环,continue
跳转到下一次迭代。
答案 1 :(得分:96)
有关详细信息和代码示例,请参阅Branching Statements:
break
break语句有两种形式:标记和未标记。你看到了 在前面讨论的switch语句中没有标记的形式。您 也可以使用未标记的中断来终止for,while或do-while 循环[...]
未标记的break语句终止最里面的开关,对于, while,或do-while语句,但带标签的断点终止外部 言。
continue
continue语句跳过for的当前迭代,同时, 或者do-while循环。未标记的表格跳到最里面的末尾 循环的主体并评估控制它的布尔表达式 环。 [...]
带标签的continue语句会跳过标有给定标签的外循环的当前迭代。
答案 2 :(得分:61)
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的一个quizzle。 :)
答案 3 :(得分:27)
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
答案 4 :(得分:23)
break
完全退出循环。 continue
跳过 continue 语句后的语句并继续循环。
答案 5 :(得分:7)
休息声明
在循环完全迭代所有步骤值之前,有时需要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语句之后,循环执行将执行步骤值并在继续下一次迭代之前评估布尔条件。在下面的示例中,我们在循环中打印出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]
答案 6 :(得分:7)
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
答案 7 :(得分:6)
break
语句会导致其适用的语句终止(switch
,for
,do
或while
)。
continue
语句用于结束当前循环迭代并将控制返回到循环语句。
答案 8 :(得分:5)
continue
跳过当前正在执行的循环,移动下一个循环,而break
移动循环的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
答案 9 :(得分:4)
请考虑以下事项:
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。
还应该注意, 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
答案 10 :(得分:3)
break
语句突破循环(下一个要执行的语句是结束括号后的第一个语句),而continue
在下一次迭代时开始循环。
答案 11 :(得分:2)
break
语句存在当前的循环控制结构,并在continue
退出时跳转,但跳回到循环条件。
答案 12 :(得分: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
答案 13 :(得分: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
这是继续和休息的基本区别。
答案 14 :(得分:1)
这是休息的语义:
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:;
这是继续的语义:
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:;
}
答案 15 :(得分:1)
首先,我认为你应该知道Java中有两种类型的break和continue标记为break,未标记的break,标记为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语句终止最里面的开关,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演示,你会得到:
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
答案 16 :(得分:0)
简单地说:break将终止当前循环,并在循环结束后继续执行第一行。继续跳回到循环条件并继续运行循环。
答案 17 :(得分:0)
for (int i = 1; i <= 3; i++) {
if (i == 2) {
continue;
}
System.out.print("[i:" + i + "]");
在netbeans中尝试此代码,您将了解中断和继续之间的差异
for (int i = 1; i <= 3; i++) {
if (i == 2) {
break;
}
System.out.print("[i:" + i + "]");
答案 18 :(得分: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
答案 19 :(得分:0)
继续法规停止操作并开始下一步操作 例如:
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停止循环或退出循环
答案 20 :(得分:-1)
所以你在for或while循环中。使用休息;会让你走出循环。如此,它将结束。继续;将告诉它运行下一次迭代。
在if语句中使用continue没有意义,但是中断;很有用。 在开关......的情况下,总是使用休息;结束一个案例,所以它不会执行另一个案例。