标签:
java标签顾名思义就是在指定的地方打个标记,程序执行到某个特定的地方返回到标记处,再执行某些操作。
介绍“标签”先要介绍break和continue关键字。
break关键字:指停止当前代码块
continue关键字:指停止当次代码块
为什么说“代码块”看了下面就知道,break和continue不光可以在for,while,switch等使用。
问题1.
当内侧循环i等于2时,结束两层循环?
//设双层循环,外层i,内层j for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if(i==2)break; //结束两层循环 System.out.println(j+" "+i); } }
结果发现break是无法结束两层循环,因为它只能结束内层循环。这个问题如果层数增多为三层可能更加力不从心啊!
//设双层循环,1层i,2层j, 3层k for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { for (int k= 0; k < 3; k++) { if(j==2)break; //结束2层 j 循环 System.out.println(j+" "+i+" "+k); } } }
问题2.
当2层循环j等于2时,停止1层循环接着运行
for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { if(i==2)continue; //停止当次i的循环 System.out.println(j+" "+i); } }
同样的问题也出现在continue上,有时候算法就是这么“恶心”。同样的问题也可能出现在三层循环中
for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { for (int k= 0; k < 3; k++) { if(j==2)continue; //停止当前j层循环 System.out.println(j+" "+i+" "+k); } } }
提了两个问题就开始介绍“标签”了。
格式: 标签名 : 代码块
介绍:标签名 就是英文单词随意写
代码块 这个地方经测试 只要被 “{ }”包裹的代码块都可以使用。
实验:
//代码1 lable1:for (int i = 0; i < 3; i++) { lable2:for (int j = 0; j < 3; j++) { if(i==2)break lable1; //停止lable1 System.out.println(j+" "+i); } } //代码2 Integer[] a ={1,2,3,4}; Integer[] b ={1,2,3,4}; lable1:for (Integer a1 : a) { lable2:for (Integer a2 : b) { if(a1==1)break lable1; //停止lable1 } } //代码3 Integer a=1; boolean c=true; boolean d=true; lable1:while (c) { lable2:while (d) { a++; if(a==3)break lable1; //停止lable1 System.out.println(a); } } //代码4 重点介绍 Integer a= 1; label1:{ System.out.println(a++); if(a==2) break label1; //停止lable1 }
重点介绍代码4,为什么呢?
因为这个就是标签的魅力了,你完全可以套很多层。甚至可以编写一套自己逻辑的循环体。
Integer a= 1; label1:{ lable2:{ System.out.println(a++); if(a==2) break label1; } }
“标签”的特点就是做标记,利用break和continue关键字就可以任意跳转和跳出。从而解决上面两个问题了。
合理的运用break和continue配合“标签”的使用,可以写出很好的算法,解决算法中奇葩的跳出和跳转。但是缺点也是明显的就是“思路很乱”。不会的慎用!!!
标签:
原文地址:http://www.cnblogs.com/wy51/p/4421940.html