码迷,mamicode.com
首页 > 其他好文 > 详细

break和continue特殊玩法“标签”

时间:2015-04-13 14:28:51      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:

    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配合“标签”的使用,可以写出很好的算法,解决算法中奇葩的跳出和跳转。但是缺点也是明显的就是“思路很乱”。不会的慎用!!!



 

 

 

 

 

break和continue特殊玩法“标签”

标签:

原文地址:http://www.cnblogs.com/wy51/p/4421940.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!