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或continue
    1.打印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步