Java编程讲义
上QQ阅读APP看书,第一时间看更新

3.5.2 continue语句

continue语句与break语句类似,都有两种用法,可以在循环体中直接使用,也可以配合标签使用。但两者在使用上的含义不同,continue在循环体中直接使用,用来结束本次循环直接进入下一次循环,配合标签使用则用来实现类似C语言goto语句的效果,实现向前跳转。同时,需要注意continue只能用在循环体中。

1.使用continue退出当前循环

continue语句在循环体中直接使用可跳出本次循环体,本次循环体中剩余的语句将不再执行,直接进入下一次循环。换句话说,continue语句可以结束本次循环,跳到循环条件处判断是否进入下一次循环。continue语句可以出现在while循环、do-while循环以及for循环的循环体中,一般配合if语句进行使用,执行流程如图3.13所示。

从图3.13可以看出,程序碰到continue语句时,之后的语句组2将不再执行,直接回到循环条件处进行判断,根据判断结果来决定是否进入下一次循环。continue语句类似break语句,两者的区别在于:continue并不是中断整个循环,而是终止当前这一次,进入下一次循环,并且continue只能出现在循环体中;break语句出现在循环体中是终止整个循环,也可以出现在switch语句中。

接下来,根据continue的特性,编写一个案例:循环遍历1~10之间的偶数,4不要打印出来,如例3-16所示。

图3.13 continue控制循环流程图

【例3-16】 Demo0316.java

程序的运行结果如下:

    -------循环遍历1~10的偶数,4不要打印出来------
    2  6  8   10

例3-16中,第7行是一个判断条件,如果i不是偶数,将执行continue语句,即终止本次循环,继续下一次循环。意味着在i不是偶数的情况下,第10~13行将不执行,直接执行i++,然后进行i <= 10判断,如果条件成立则进入下一次循环,否则退出循环。第10行同样是一个判断条件,如果i的值为4,则执行continue语句,即第13行不执行,直接执行i++,然后进行循环条件判断,如果成立则进入下一次循环,否则退出循环。如果i是偶数,并且i不等于4,将执行第13行,即将其输出。

continue语句不仅可以在for循环中使用,也可以在do-while、while循环中使用,方式相同,都是书写在循环体中,碰到continue语句将终止本次循环,进入下一次循环。此处仅举例了continue语句在for循环体中的使用,其他情况类似,不再赘述。

2.continue语句配合标签

continue语句可以配合标签使用,该标签必须是为循环指定的名字,不能是普通代码块。当程序执行到continue语句后,会回到标记的所在位置继续指定循环的下一次循环。

与break类似,continue所处的循环也可以是嵌套的,continue后所书写的标签名可以是当前循环的标签名,也可以是外层循环的标签名。continue语句可以出现在while、do-while以及for循环中用来控制语句的跳转,在此以for循环为例进行语法的说明,具体语法如下:

    标签名1:for(;;) {
      循环1中的语句…
      标签名2:for(;;) {
        循环2中的语句1
        if (跳转条件) {
          continue 标签名1/标签名2;
        }
        循环2中的语句2
      }
      循环1中的语句…
    }
    循环后的代码…

在此,continue如果跟的是标签名2,则跳转到标签2对应的循环,即中止循环2的当前循环,进入下一次循环,与直接使用continue结果一样;如果跟的是标签1,则跳转到标签1对应的循环,直接结束外层循环的当前循环(循环1中嵌套的循环将直接终止),进入外层循环的下一次循环。此处语法仅仅是两层嵌套循环,实际可以是很多层,含义与此一样。

接下来,利用continue配合标签使用实现九九乘法表,如例3-17所示。

【例3-17】 Demo0317.java

程序的运行结果如下:

    -------九九乘法表------
    1*1=1
    1*2=2   2*2=4
    1*3=3   2*3=6    3*3=9
    1*4=4   2*4=8    3*4=12  4*4=16
    1*5=5   2*5=10   3*5=15  4*5=20  5*5=25
    1*6=6   2*6=12   3*6=18  4*6=24  5*6=30  6*6=36
    1*7=7   2*7=14   3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
    1*8=8   2*8=16   3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
    1*9=9   2*9=18   3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81

例3-17中,第6行的a是外层循环的标签。第7行的b是内层循环的标签。该九九乘法表与之前例3-12九九乘法表有所不同,内层循环条件不是j <= i,而是j <= 10,即从内层循环来看它应该循环10次。第9行是一个判断,如果j和i的值相等,则执行第10行和第11行语句。第11行意味着继续a标签对应的循环,即外层循环,执行该语句将结束内层循环,直接进行外层循环的i++,然后进行外层循环的循环条件判断,如果条件成立则进入外层循环的下一次循环。

从结果很明显可以看出,内层循环并没有执行10次,而是到达i == j时就终止了,进入了外层循环的下一次循环。