关于JAVA跳出双重循环

最近面试,遇上一道题,如下:

 public void test(){

           int a=0;

           for(int i=0;i<100;i++){

                  for(int j=0;j<100;j++){

                     //直接跳出双层循环

                 }

          }

     //跳出到这里

     int b=1;

 }

当时在想,怎么一句话就跳出到指定位置,也是自己钻牛角了,return的话,直接就结束了,break的话,只能跳出一层,continue只是中断当前,于是回想到goto,在JAVA中的标签。

test1:

           for (int i = 0; i < 100; i++) {
                 for (int j = 0; j < 10; j++) {
                     System.out.print(1);
                     i=100;
                     break;
                 }
                 System.out.print(2);
             }

            System.out.print(3);

输出为:  1  2  3       显然单纯的break加逻辑判定,达不到上述的要求,外面的循环会再走一次。

test2:

          for (int i = 0; i < 100; i++) {
                  for (int j = 0; j < 10; j++) {
                       System.out.print(1);
                        i=100;j=10;
                       continue;
                  }
                 System.out.print(2);
            }
            System.out.print(3);

输出为:  1  2  3       使用continue跟test1:一样

test3:

只能尝试使用标签

 标签加continue

         labe:for(int i=0;i<10;i++){
                      for(int j=0;j<10;j++){  
                    System.out.println(1);
                    i=100;
                    continue labe;//跳出整个循环
                }
                System.out.println(2);
            }

          System.out.print(3);

输出为:  1    3  

 标签加break

         labe:for(int i=0;i<10;i++){
                for(int j=0;j<10;j++){  
                    System.out.println(1);
                    break labe;//跳出整个循环
                }
                System.out.println(2);
            }

         System.out.print(3);

输出为:  1    3       都可以达到要求,于是我在想,可能面试的时候有些东西不能被限制在纸面上,也需有更好的答案,不能拘泥于问答,于是想到提炼方法。

test4:

        private void for1(){
                  for(int i=0;i<10;i++){
                        for(int a=0;a<10;a++){  
                             System.out.println(1);

                             return;

                             //System.exit(0)

                         }
                       System.out.println(2);
                  }
         }

     new T().for1();

     System.out.print(3);

输出为:  1    3 

于是额外测试了一下System.exit(0) (或者别的参数),发现输出都为: 1 

发现大神们讲的不错

    1,如果在main方法中System.exit(0)与return没有区别,都是终止程序。

    2,如果是别的方法,那System.exit(0)直接之中程序,就算后面有代码也不执行,而return则返回至调用该方法的地方,如果 后面还有代码将继续执行。

但是我感觉两者定义之间有本质的不同,对于JAVA程序而言,运行System.exit()会终止JVM。对于参数的解释:非零状态码指示异常终止,零状态是终止整个程序。不同参数两者的区别是返回值不同:exit(x) --  x<>0通常是返回错误码;exit(x) -- 通常是退出程序。

而return 作为关键字有两个定义:

                           1,指定一个方法返回什么值(假设它没有void返回值);

                           2,会导致当前的方法退出,并返回那个值。

           如果在返回void的方法中没有一个return语句,那么在该方法的结尾处会有一个隐式的return,因此在方法中并非总是必须要有一个return语句。但是如果一个方法声明它将返回void之外的其他东西,那么必须确保每一条代码路径豆浆返回一个值。

言归正传,对于循环而言:

                                

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

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

                                  3,一般break会中断并跳出当前循环。

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

重点:JAVA里需要使用标签的唯一理由就是因为有循环嵌套存在,而且想从多层嵌套中break或continue。


欢迎拍砖,如果你有更好的方法。希望你能留言。





猜你喜欢

转载自blog.csdn.net/qq_39308071/article/details/79674599
今日推荐