黑马程序员技术交流社区

标题: 关于return结束循环两个代码比较 [打印本页]

作者: 王瀛    时间: 2012-12-22 15:34
标题: 关于return结束循环两个代码比较
本帖最后由 王瀛 于 2012-12-22 16:14 编辑

刚刚看个别人的关于return的帖子,自己去试了一下。
附上代码A:
  1. package myTest;

  2. public class ReturnTest {
  3.         
  4.         public static void main(String[] args) {
  5.                 test1();
  6.         }
  7.         
  8.         public static void test1(){
  9.                 System.out.println("---------无返回值类型的return语句测试--------");
  10.                 for(int i=1;;i++){
  11.                         if(i==4){
  12.                                 return;
  13.                         }        
  14.                         System.out.println("i="+i);
  15.                 }
  16.                 System.out.println("Over");//<-------------------------------AAA
  17.         }

  18. }
复制代码
其中AAA处,eclipse提醒Unreachable code
************************************************************************************************************************
但是,之前自己编写的一个程序,也有类似的结构,就没出现这个问题。
附上代码B:
  1. public static void printTo98ByReturn(){
  2.                 for(int x=1;x<=100;x++){
  3.                         if(x<100){
  4.                                 if(x==98){
  5.                                         return;//使用return,结束循环
  6.                                 }
  7.                                 else{
  8.                                         System.out.print(x+",");
  9.                                 }
  10.                         }
  11.                         else{
  12.                                 System.out.print(x);
  13.                         }
  14.                 }
  15.                 System.out.print("ReturnOver");//<-----------------------------BBB
  16.         }
复制代码
BBB处就没出现代码A中的错误提示。
我看这两个代码结构差不多啊,都是for循环里使用return结束循环,两处都是在循环体外,代码A就不能通过代码B就可以。
求详解。。。

作者: 张胜格    时间: 2012-12-22 17:13
我试了一下,是for语句中的条件语句的不同造成的。改写一下就可以了:
public static void test1(){
                System.out.println("---------无返回值类型的return语句测试--------");
                for(int i=1;i<5;i++){
                        if(i==4){
                                return;
                        }        
                        System.out.println("i="+i);
                }
                System.out.println("Over");//<-------------------------------AAA
        }
我认为可能是不加条件的话,函数只能通过return结束,后面语句肯定不能执行,而加上的话就有可能执行,虽然此处是不可能的
作者: 王瀛    时间: 2012-12-22 17:21
本帖最后由 王瀛 于 2012-12-22 17:25 编辑
张胜格 发表于 2012-12-22 17:13
我试了一下,是for语句中的条件语句的不同造成的。改写一下就可以了:
public static void test1(){
       ...

嗯,我试了一下
public static void test1(){
                System.out.println("---------无返回值类型的return语句测试--------");
                for(int i=1;i<100;i++){//加入条件i<100
                        if(i==4){
                                return;
                        }        
                        System.out.println("i="+i);
                }
                System.out.println("Over");
        }

加入循环条件后,不会报错。(虽然也访问不到Over)
但是,如果我想要在循环结束之后,输出Over,应该怎么改代码?(封装在test1函数里,不在main函数里出现打印语句。)
作者: 张胜格    时间: 2012-12-22 22:33
把它放到return语句之前,根据for语句的执行过程,其实以上代码可以等同于以下代码
public static void test1(){
                System.out.println("---------无返回值类型的return语句测试--------");
                for(int i=1;i<10&&i!=4;i++){        
                        System.out.println("i="+i);
                }
                System.out.println("Over");//<-------------------------------AAA
        }
你写的只是一个return的测试程序,实际的开发中是不会写这样的程序的
作者: 张胜格    时间: 2012-12-22 22:34
王瀛 发表于 2012-12-22 17:21
嗯,我试了一下
public static void test1(){
                System.out.println("---------无返回值类 ...

把它放到return语句之前,根据for语句的执行过程,其实以上代码可以等同于以下代码
public static void test1(){
                System.out.println("---------无返回值类型的return语句测试--------");
                for(int i=1;i<10&&i!=4;i++){        
                        System.out.println("i="+i);
                }
                System.out.println("Over");//<-------------------------------AAA
        }
你写的只是一个return的测试程序,实际的开发中是不会写这样的程序的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2