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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李迪 黑马帝   /  2011-7-26 20:42  /  2158 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

对于非void方法,必须确保方法执行,每个可能流程中都存在return,
static int method(int num){
if (num>0)
return 1;
else if(num==0)
return 0;
else if (num<0)
return -1;
}这段代码为执行不成功呢?帮助

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

2 个回复

倒序浏览
黑马网友  发表于 2011-7-26 20:47:34
沙发

回复 楼主 的帖子

楼主有点小粗心哟。
这是编译器不让你过,原因很简单,你每一个条件都有返回值不错,但是如果你传进来的数据没有进入任何一个条件分支呢?就木有了返回值,因此编译器不让你过。但是一个数字要么小于0要么等于0要么大于0,这些条件你都列取出来的,是不错。但编译器是严格检查的,不是运行时判断的,所以这是编译错误,楼主在最后一行的else if换成else就可以了,或者在最后一句加上return 0

评分

参与人数 1技术分 +2 收起 理由
admin + 2 你很热情!

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-7-26 20:48:27
藤椅
网上查德希望可以帮助你
编译器并不像想象中的那么智能,虽然你的选择语句已经包括了n的所有取值情况,但是对于形如if……else if……的选择语句,只有最后以else结束,编译器才能肯定已经罗列了所有选择。
也可以这么理解,考虑下面的代码:
public static int sign(int n) {
if(n=1) return 1;
else if(n==2) return 0;
else if(n==3) return -1;
}
可以肯定这选择语句并没有罗列出所有情况,但是在编译器看来,这跟你本来写的没有区别,编译器不可能帮用户判断复杂的逻辑,它必须按照某种可以准确描述的规则来编译。

评分

参与人数 1技术分 +2 收起 理由
admin + 2

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马