A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王瀛 高级黑马   /  2012-12-22 15:34  /  1633 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王瀛 于 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就可以。
求详解。。。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
我试了一下,是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: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函数里出现打印语句。)
回复 使用道具 举报
把它放到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 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的测试程序,实际的开发中是不会写这样的程序的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马