zoukankan      html  css  js  c++  java
  • break、continue关键字配合标签使用,实现跳转功能

    知识点:continue和break配合标签实现跳转功能

          尽管java中goto是一个保留字,但在语言中并未使用它,Java没有goto。然后java也可以完成一些类似于跳转的操作,那就是将break和continue配合标签一起使用

    标签是后面跟有冒号的标识符,就像下面这样:

    lable1:

          在java中,标签起作用的唯一地方刚好是在迭代语句之前。“刚好之前”的意思表明,在标签和迭代之间置入任何语句都不好。而在迭代之前设置标签的唯一理由是:我们希望在其中嵌套另一个迭代或者一个开关。这是由于break和continue关键字通常只中断当前循环,但若随同标签一起使用,它们就会中断循环,直到标签所在的地方:

    下面是标签用于for循环的例子:

    public class LabledFor{
    public static void main(String[] args){
    int i = 0;
    outer:
    for(;true;){
    inner:
    for(;i<10;i++){
    System.out.println("i="+i);
    /**在抵达for循环的末尾之前,递增表达式会执行*/
    if(i==2){
    System.out.println("continue");
    continue;
    }
    /**break会中断for循环,而且在抵达for循环的末尾之前,递增表达式不会执行。由于
    * break跳过了增量表达式,所以在此处直接对i进行递增操作
    */
    if(i==3){
    System.out.println("break");
    i++;
    break;
    }
    /**continue outer语句会跳到循环顶部,而且也会跳过inner标签下的for循环的递增,
    * 所以这里也对i直接递增
    */
    if(i==7){
    System.out.println("continue outer");
    i++;
    continue outer;
    }
    if(i==8){
    System.out.println("break outer");
    break outer;
    }
    /**在抵达inner标签下的for循环末尾之前,inner下的for循环的递增表达式会执行*/
    for(int k = 0;k< 5;k++){
    if(k==3){
    System.out.println("continue inner");
    continue inner;
    }
    }
    }
    }
    }
    }

    输出:

    continue inner
    i=1
    continue inner
    i=2
    continue
    i=3
    break
    i=4
    continue inner
    i=5
    continue inner
    i=6
    continue inner
    i=7
    continue outer
    i=8
    break outer

          如果没有break outer语句,就没有办法从内部循环里跳出外部循环。这是由于break本身只能中断最内层的循环(continue也是同样如此)。

    下面的例子展示了带标签的break以及continue语句在while循环中的用法:

    public class LabledWhile{
    public static void main(String[] args){
    int i = 0;
    outer:
    while(true){
    System.out.println("Outer while loop");
    while(true){
    i++;
    System.out.println("i="+i);
    if(i==1){
    System.out.println("continue");
    continue;
    }
    if(i==3){
    System.out.println("continue outer");
    continue outer;
    }
    if(i==5){
    System.out.println("break");
    break;
    }
    if(i==7){
    System.out.println("break outer");
    break outer;
    }
    }
    }
    }
    }

    输出:

    Outer while loop
    i=1
    continue
    i=2
    i=3
    continue outer
    Outer while loop
    i=4
    i=5
    break
    Outer while loop
    i=6
    i=7
    break outer

    同样的规则亦适用于while:

    1、一般的continue会退回最内层循环的开头(顶部),并继续执行

    2、带标签的continue会达到标签的位置,并重新进入紧接在那个标签后面的循环

    3、一般的break会中断并跳出当前循环

    4、带标签的break会中断并跳出标签所指的循环

    推荐一个自己业余时间开发的网盘搜索引擎,360盘搜www.360panso.com

  • 相关阅读:
    51nod 1445 变色DNA ( Bellman-Ford算法求单源最短路径)
    51nod 1307 绳子与重物 (标记父节点更新即可)
    AOJ GRL_1_C: All Pairs Shortest Path (Floyd-Warshall算法求任意两点间的最短路径)(Bellman-Ford算法判断负圈)
    AOJ GRL_1_B: Shortest Path
    AOJ GRL_1_A: Single Source Shortest Path (Dijktra算法求单源最短路径,邻接表)
    【算法】prim算法(最小生成树)(与Dijkstra算法的比较)
    【算法】Dijkstra算法(单源最短路径问题)(路径还原) 邻接矩阵和邻接表实现
    【算法】Bellman-Ford算法(单源最短路径问题)(判断负圈)
    面试之二:Redis是单线程还是多线程?以及处理模型。
    面试之一:CMS收集器整理
  • 原文地址:https://www.cnblogs.com/eczhou/p/2285639.html
Copyright © 2011-2022 走看看