zoukankan      html  css  js  c++  java
  • 如何跳出当前的多重循环?

    最近看到一个笔试题:
    如何跳出当前的多重循环?
    但是看到好多的答案:break,return,觉得这个答案似乎有些不妥

    于是仔细推导一番

    首先,不建议使用return跳出循环,题目也说到了是多重循环,
    如果使用return的话,会跳出整个函数,那后续的代码岂不是无法执行

    所以在这里,整理了一下自己的看法,
    目前了解到的一些循环有for,while,do while,switch
    下面一一说明
    public static void main(String[] args) {

    //使用break,或者标记break
    ok:for(int i=0;i<10;i++){
    System.out.println("xxx");
    for(int j=0;j<10;j++){
    if(j>2)
    break;//==return;
    System.out.println(j);
    }
    }
    这里需要说明的是,ok是用来标记跳出哪一个循环
    当ok标记在第一层(最外层)循环的时候,相当于return的功能,跳出整个循环
    "xxx"只会输出一次
    而当ok标记在第二层的时候,将相当于break的功能,只跳出当前的循环
    而"xxx"会在不执行第二层的情况下,完成第一层的循环
    for(int i=0;i<10;i++){
    System.out.println("xxx");
    ok:for(int j=0;j<10;j++){
    if(j>2)
    break ok;//==break;
    System.out.println(j);
    }
    }


    //使用自定义的boolean变量,配合循环条件一起共同满足方可执行循环
    //另外需要注意的时候,在跳出条件成立时,不仅设置flag的值,同时也要加上break


    这里需要说明的是,!flag是用来标记跳出哪一个循环
    当!flag标记在第一层(最外层)循环的时候,如果跳出条件成立,则会关闭第一层的循环
    相当于return;的功能
    boolean flag=false;
    for(int i=0;i<5&&!flag;i++){
    System.out.println("xxx");
    for(int j=0;j<5;j++){
    if(j>2){
    flag=true;break;
    //上面两句的功能等价于 return;
    }
    System.out.println(j);
    }
    }

    当!flag标记在第二层的时候,
    程序会先执行一次"xxx",然后再执行第二层循环,当跳出条件成立时,就关闭当前的循环
    而下一次循环时,只会执行第一层的循环,记住,这个!flag是关闭循环,而不是跳出
    boolean flag=false;
    for(int i=0;i<5;i++){
    System.out.println("xxx");
    for(int j=0;j<5&&!flag;j++){
    if(j>2){
    flag=true;
    break;
    }
    System.out.println(j);
    }
    }

    最后一种才是所谓的break,由一层循环开始,到第二层。
    当跳出条件成立,就跳出当前的循环,
    继而又从一层开始循环,在到第二层,又等到跳出条件成立,从一层开始
    周而复始
    for(int i=0;i<5;i++){
    System.out.println("xxx");
    for(int j=0;j<5;j++){
    if(j>2){
    break;
    }
    System.out.println(j);
    }
    }

    另外,对于while和switch都可使用标记,但是貌似switch目前还不会用boolean值做条件

    int i=0;
    ok:while(true){
    i++;
    System.out.println(i);
    if(i==5)
    break ok;
    }

    int i=0;
    boolean flag=false;
    while(true&&!flag){
    i++;
    System.out.println(i);
    if(i==5)
    flag=true;
    }


    int i=0;
    ok:do{
    i++;
    System.out.println(i);
    if(i==5)
    break ok;
    }while(true);

    int i=0;
    boolean flag=false;
    do{
    i++;
    System.out.println(i);
    if(i==5)
    flag=true;
    }while(true&&!flag);

    貌似 switch只能用标记吧
    int x=3;
    ok:switch(x){
    case 1:
    x*=10;
    break;
    case 2:
    x*=10;
    break;
    case 3:
    x*=10;
    break ok;
    case 4:
    x*=10;
    break;
    default:
    x=0;
    }
    System.out.println(x);

  • 相关阅读:
    idea常用快捷键及操作
    Ubuntu 装nexus
    ubuntu安装gitlab
    ubuntu安装jdk,maven,tomcat
    ubuntu安装gitlab-ci-runner、注册
    ubuntu开启远程shell,开启上传下载
    Ubuntu安装软件提示boot空间不足
    POJ3461 KMP简单变形输出模式串在主串出现的次数
    涨姿势stl map['a']['a']=b;
    对链表的操作(数据结构线性表算法设计练习)
  • 原文地址:https://www.cnblogs.com/javawebsoa/p/3067719.html
Copyright © 2011-2022 走看看