4.6 break和continue
break和continue用于循环运行的时候进行控制。它们的功能是:
break:跳出当前循环,不再执行剩余的循环,即使条件仍然成立。break语句的出现宣告了判断是否死循环不能光看条件。
continue:停止执行本次循环剩余的代码,立即回去判断循环条件。
现在我们来看两个例子:
int i=0;
while(i < 100){
i++;
if(i==56)
break;
System.out.println(i);
}
这段代码将打印1、2、3…53、54、55。因为到了56,就符合了中间的if语句,运行了break,剩余的所有循环都被打断不再执行了——就算条件仍然成立。
如果是这样:
int i=0;
while(i < 100){
i++;
if(i==56)
continue;
System.out.println(i);
}
这段代码将打印1、2、3…53、54、55、57、58...99、100。唯独少了56。到了56,就符合了中间的if语句,运行了continue,剩余的代码不再执行,立刻回到条件处。你也可以理解为,重新开始新的一次循环。continue写得不慎,容易造成死循环,例如上面的代码,只要把i++的位置换一下:
int i=0;
while(i < 100){
if(i==56)
continue;
i++;
System.out.println(i);
}
出现了什么?解释一下原因。
continue用得比较少,因为通常用if语句完成了这类功能。下面的这段代码的功能也是打印1、2、3…53、54、55、57、58...99、100:
int i=0;
while(i < 100)
{
i++;
//i不等于56的时候才打印
if(i != 56)
System.out.println(i);
}
练习题
-
阅读代码作出选择1.下面代码的结果是: (2分) [选择]A.
B. 死循环, 一直打印ok
C. 语法错误
D. 打印1个ok
E. 没有语法错误,但什么都不打印
int i=0; while(true){ System.out.println( "ok"); break;}2.下面代码的结果是: (2分) [选择]A.
B. 死循环
C. 打印1到10
D. 打印0到10
E. 打印10
for(int i=0;;i++){ if(i> 10) continue; System.out.println(i);}3.下面代码的结果是: (2分) [选择]A.
B. 死循环
C. 打印1 到10
D. 打印0到10
E. 打印10
int a=11; int i=0; while(true){ i++; if(i==a) break; System.out.println(i);}4.下面代码的结果是: (2分) [选择]A.
B. 打印1 到10
C. 打印1 到9,11到99
D. 打印1 到9,11到100
E. 打印10
int a=10; int i=0; while(i < 100){ i++; if(i==a) continue; System.out.println(i);}5.下面代码的结果是: (2分) [选择]A.
B. 死循环
C. 打印1到10
D. 打印0到10
E. 打印10
for(int i=0;;i++){ if(i> 10) break; System.out.println(i);} -
阅读下面的伪代码,填写break或continue1.打印1到10,包括1和10 (2分) [编程填空]
int i=1;while(true) { if(i > 10) ; System.out.println(i); i++;}2.这是求最小公倍数的伪代码: (2分) [编程填空]补齐代码,最终打印的i就是最小公倍数键盘输入m;键盘输入n;i的初值是m;while(i小于m*n){ if(i能被m整除并且i能被n整除) ; i++;}System.out.println(i); -
编程题1.根据上题的伪代码,写出程序寻找两个数的最小公倍数。 (10分) [编程]import java.util.Scanner;两个数字分别为m和n,都从键盘输入。2.输入两个数m和n,输出它们的最大公约数。 (10分) [编程]import java.util.Scanner;由于是最大公约数,我们可以用break减少循环的次数。
1.i初值设置为m
2.只要i大于0,进入第3步;
3.m能被i整除,并且n能被i整除,那么打印i,break,算法结束;否则i--,回到第2步