
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时就终止了,进入了外层循环的下一次循环。