黑马程序员技术交流社区

标题: return为什么编译会失败呢? [打印本页]

作者: 郑彬    时间: 2012-8-22 23:20
标题: return为什么编译会失败呢?
第一种写法编译错误,后来用第二种写,编译正确,为什么第一种编译会失败呢?
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;
}

作者: 唐杨老师    时间: 2012-8-22 23:31
return 放在循环里边的时候,有可能因为种种原因无法执行到,,就是说,如果循环外部return有可能无法传回方法的返回值.
(虽然此例 i  必然会加的98,但是虚拟机在编译的时候是不考虑计算内容的)

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

才编译器才不报错

作者: 周世阳    时间: 2012-8-22 23:31
因为方法被标注了返回值类型以后是必须要有返回值的,如果是第1种情况,是有可能没有返回值的(当i不等于98的时候),所以任何返回值语句只存在于判定语句或try语句中的return都是不合法的,必须在这两种块中外有一个返回语句才是合理的
作者: 广驰    时间: 2012-8-23 00:51
编译器只检查你的语法错误,虽然有你在for循环中return语句,而且通过语句看,必然会执行到循环中的return,但是编译器不管,编译器不会把你的程序运行一边,所以在编译器看来你的for循环中的return可能是无法被执行的。
而这个函数必须要返回值,所以你必须在for循环后面再使用一次return。
作者: 许泽俊    时间: 2012-8-23 10:19
因为i可能不等于98。那么第一个return可能无法执行。这样一来,你的方法就没有返回值了。编译器检测到了这个错误。编译错误

作者: 刘学    时间: 2012-8-23 11:11
java在编译时是对其进行检查的,如果放到if语句下面,当不满足条件时return语句不会被执行到,也就是说不能保证有返回值,而下面的方法的return语句一定有一个会执行到,所以能编译通过。
作者: 邓超军    时间: 2012-8-23 21:23
每一个函数(返回值类型为void除外)都必须有一个单独的return语句与之对应,以确保函数可以有返回值。而和if等语句在一起的return,有两个作用:一、结束函数;二、给函数返回值。而且有时和if等语句结合的return执行不到,所以第一段代码出错。
作者: 郑彬    时间: 2012-8-25 20:11
问题已经解决
作者: 吴通    时间: 2012-8-25 21:34
楼主, 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;
        }
}

这样就行了


作者: 尤泽红    时间: 2012-8-25 23:36
你定义的方法是有返回值的!定义oid 方法就不需要return了!第一个并没有给它返回int的参数,你错误代码中的第一个return是在for循环中!




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