有人能告诉我break语句和continue语句的区别吗?
当前回答
为了在满足条件时阻止执行任何东西,应该使用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的基本区别。
其他回答
答得好,简单准确。
我会添加一个代码示例。
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
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
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的continue语句跳过循环的当前迭代,直接进入下一个迭代。在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;而不是打破1;将导致循环从outer1标签开始继续循环,而不是跳出循环。注意每一次如何继续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 -终极指南
break语句跳出循环(要执行的下一个语句是右大括号之后的第一个语句),而continue语句在下一个迭代中开始循环。
为了在满足条件时阻止执行任何东西,应该使用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的基本区别。
推荐文章
- 如何分割逗号分隔的字符串?
- Java字符串—查看字符串是否只包含数字而不包含字母
- Mockito.any()传递带有泛型的接口
- 在IntelliJ 10.5中运行测试时,出现“NoSuchMethodError: org.hamcrest. matcher . descripbemismatch”
- 使用String.split()和多个分隔符
- Java数组有最大大小吗?
- 在Android中将字符串转换为Uri
- 从JSON生成Java类?
- 为什么java.util.Set没有get(int index)?
- Swing和AWT的区别是什么?
- 为什么Java流是一次性的?
- 四舍五入BigDecimal *总是*有两位小数点后
- 设计模式:工厂vs工厂方法vs抽象工厂
- Java:检查enum是否包含给定的字符串?
- 它的意思是:序列化类没有声明一个静态的最终serialVersionUID字段?