打从我接触VF开始,到后面的C、C++,最后到我学了快半年的Java为止,对于循环中的跳出控制语法“break”、“continue”来说,一点都不陌生!然后直到今天,看《Flash ActionScript 3.0 殿堂之路》一书时才对这两个家伙有了有更进一步的了解!才知道在AS中这两个还可以使用标签来标记!那么java中是不是也可以这样做呢?(因为语言虽然不同,但是语言的一些流程控制还是蛮相似的,再说人家AS 3.0也是面向对象的嘛!)。上网找了一下还是有这样的用法的在java中。
我们先看不用标签的例子。我们一般用这两个家伙的时候,可能对于大部分初学者来说,只知道break是跳出整个循环,而continue是跳出该层循环继续执行后面的循环!先来看一个例子:
public class Demo5 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int a=4; switch (a){ case 1: System.out.println("1"); break; case 2: System.out.println("2"); break; case 3: System.out.println("3"); break; case 4: System.out.println("4"); break; default: System.out.println(""); } int b=5; for(int i=0;i<=5;i++){ if(i==4) continue; System.out.println(i); } } }
对于switch的输出结果:
4
对于for语句的输出结果是:
0
1
2
3
5
这也许是对于跟我差不多一样的初学者碰到的最多的break和continue跳出循环的情况了啊!但是我们有没有想过,当我们的循环有三层以上而且我们需要根据我们设定的条件跳转到特定的那一层循环中去怎么办呢?下面这个例子是我从《Flash ActionScript 3.0 殿堂之路》看到的例子(因为这本书中讲的是AS语言例子,在这里我把改成java语言):
package com.test; public class Demo5 { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub //多层循环(三层) int i=-1; parent://设定最外层循环标签为parent do{ System.out.println("{父循环"); son://设定第二层循环标签为son while(true){ i++; System.out.println("\t{子循环i="+i); for(int k=0;k<3;k++){ System.out.println("\t\t{孙循环 k="+k); if(i==1){ System.out.println("\t\ti==1:continue 孙循环"); continue; } if(i==2){ System.out.println("\t\ti==2:continue 子循环:son"); continue son; } if(i==3){ System.out.println("\t\ti==3:continue 父循环:parent"); continue parent; } if(i==4){ System.out.println("\t\ti==4:break 孙循环"); break; } if(i==5){ System.out.println("\t\ti==5:break 子循环:son"); break son; } if(i==6){ System.out.println("\t\ti==6:break 父循环:parent"); break parent; } System.out.println("\t\t孙循环}"); } System.out.println("\t子循环}"); } System.out.println("父循环}"); }while(true); } }
大家请看我用红色标记出来的,是不是跟第一个例子有点不一样啊?在循环外面加一个循环标签,这样我们就可以跳转我们制定的标签了。比如从最里面的一层(例子中的孙标签那一层)跳转到最外面一层(例子中的父标签那一层)的话,如果不用标签的话,我们用break的话只能跳转到最里面一层的外面一层(例子中的子标签)。换句话说,如果不用标签的话,孙标签只能跳转到子标签那一层。但如果加了标签的话,在break后面加上标签的名字,就可以跳转到break后面的那个标签那一层了。这样我们就可以更好的控制程序的流程啦!(也许你可以来个穿越,从你这一代穿越回到曾祖父的曾祖父的曾祖父……的那一代去咯!)
如果我们看上面的例子的话,你的输出结果是什么呢?
哈哈,下面是第二个例子的输出结果:
{父循环 {子循环i=0 {孙循环 k=0 孙循环} {孙循环 k=1 孙循环} {孙循环 k=2 孙循环} 子循环} {子循环i=1 {孙循环 k=0 i==1:continue 孙循环 {孙循环 k=1 i==1:continue 孙循环 {孙循环 k=2 i==1:continue 孙循环 子循环} {子循环i=2 {孙循环 k=0 i==2:continue 子循环:son {子循环i=3 {孙循环 k=0 i==3:continue 父循环:parent {父循环 {子循环i=4 {孙循环 k=0 i==4:break 孙循环 子循环} {子循环i=5 {孙循环 k=0 i==5:break 子循环:son 父循环} {父循环 {子循环i=6 {孙循环 k=0 i==6:break 父循环:parent
跟你自己的结果是不是一样呢?!
总结:书山有路勤为径!!!