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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑彬 中级黑马   /  2012-8-22 23:20  /  3157 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

第一种写法编译错误,后来用第二种写,编译正确,为什么第一种编译会失败呢?
private static int sum3(){
int sum=0;
for(int i=1;i<=100;i++){
sum+=i;
if(i==98)
return sum;
}
}

private static int sum3(){
int sum=0;
for(int i=1;i<=100;i++){
sum+=i;
if(i==98)
return sum;
}
return sum;
}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

9 个回复

倒序浏览
return 放在循环里边的时候,有可能因为种种原因无法执行到,,就是说,如果循环外部return有可能无法传回方法的返回值.
(虽然此例 i  必然会加的98,但是虚拟机在编译的时候是不考虑计算内容的)

所以此处在循环后应加上 一定可以执行到的return

才编译器才不报错

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

回复 使用道具 举报
因为方法被标注了返回值类型以后是必须要有返回值的,如果是第1种情况,是有可能没有返回值的(当i不等于98的时候),所以任何返回值语句只存在于判定语句或try语句中的return都是不合法的,必须在这两种块中外有一个返回语句才是合理的

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

回复 使用道具 举报
编译器只检查你的语法错误,虽然有你在for循环中return语句,而且通过语句看,必然会执行到循环中的return,但是编译器不管,编译器不会把你的程序运行一边,所以在编译器看来你的for循环中的return可能是无法被执行的。
而这个函数必须要返回值,所以你必须在for循环后面再使用一次return。

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1

查看全部评分

回复 使用道具 举报
因为i可能不等于98。那么第一个return可能无法执行。这样一来,你的方法就没有返回值了。编译器检测到了这个错误。编译错误
回复 使用道具 举报
java在编译时是对其进行检查的,如果放到if语句下面,当不满足条件时return语句不会被执行到,也就是说不能保证有返回值,而下面的方法的return语句一定有一个会执行到,所以能编译通过。
回复 使用道具 举报
每一个函数(返回值类型为void除外)都必须有一个单独的return语句与之对应,以确保函数可以有返回值。而和if等语句在一起的return,有两个作用:一、结束函数;二、给函数返回值。而且有时和if等语句结合的return执行不到,所以第一段代码出错。
回复 使用道具 举报
郑彬 中级黑马 2012-8-25 20:11:54
8#
问题已经解决
回复 使用道具 举报
吴通 中级黑马 2012-8-25 21:34:12
9#
楼主, return 返回的是sum3的值,应该直接写在sum3函数里面,而不应该写在里面
并且楼主你要求1~100的和  不需要这个if语句啊


class Demo
{
        public static void main(String[] args)
        {
                System.out.println(Demo.sum3());
        }
        private static int sum3()
        {
                int sum=0;
                for(int i=1;i<=100;i++)
                {
                        sum+=i;

                }
                return sum;
        }
}

这样就行了

回复 使用道具 举报
你定义的方法是有返回值的!定义oid 方法就不需要return了!第一个并没有给它返回int的参数,你错误代码中的第一个return是在for循环中!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马