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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© NO? 中级黑马   /  2014-4-1 11:43  /  884 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我搞了好久,才得到输出结果。可是造成这样的原因在哪?

A]QW]JM94_8F2B09RODG.jpg (78.32 KB, 下载次数: 18)

A]QW]JM94_8F2B09RODG.jpg

OQ%T1SI{K4@Y_({LO2N$LLQ.jpg (81.76 KB, 下载次数: 10)

OQ%T1SI{K4@Y_({LO2N$LLQ.jpg

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 楼主下次注意排版 及标题规则

查看全部评分

8 个回复

倒序浏览
if 后面要一条执行语句   你方法也有一条吧            就算if没有干嘛                             方法必须有返回值
回复 使用道具 举报
不加大括号  你直接把if(this.age==p.age) 删了 这句是废话
回复 使用道具 举报
因为你这个函数:public int compareTo (Person p){} 返回值类型写了int,就肯定要有返回值,所以必须有return。你写的return都是在if语句里面的,也就是说返回值都是有判断条件的。而要是if语句条件都不成立(如p=null。),就不能return值了。所以当你加了{},第二个if语句就结束了。下面的return就独立出来,就肯定可以返回值。

评分

参与人数 1技术分 +1 收起 理由
枫儿 + 1 赞一个!

查看全部评分

回复 使用道具 举报
没有返回语句,图一中的第二个if语句为假时没有返回语句,加个大括号的话if和{}组成了一个语句,这样当if为假时一样能返回
回复 使用道具 举报
本帖最后由 yanzhendong 于 2014-4-1 12:02 编辑
  1. 改成这样就行了 :return (this.age==p.age)?this.name.compareTo(p.name):(this.age-p.age);
复制代码


回复 使用道具 举报
错了,是这样return (this.age==p.age)?this.name.compareTo(p.name):(this.age-p.age);
回复 使用道具 举报
你的方法返回值是int,看你第一段代码,程序运行进来,如果发现两个if条件都不满足,程序就没有返回值了肯定出错。第二段代码,在第二个if,
  1. if(this.age==p.age){}
复制代码

if后面加个大括号,等于这个if什么事都没干,浪费资源啊。
  1. if(this.age==p.age){}
  2. return this.name.compareTo(p.name)
  3. //上面这两句直接改为下面代码即可
  4. else{
  5. return this.name.compareTo(p.name)
  6. }
复制代码

问题解决。
回复 使用道具 举报
简单的说     if里的语句有可能执行不到! if是判断,如果! 没有如果~则不会返回结果。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马