黑马程序员技术交流社区

标题: 这是为什么? [打印本页]

作者: NO?    时间: 2014-4-1 11:43
标题: 这是为什么?
我搞了好久,才得到输出结果。可是造成这样的原因在哪?

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

A]QW]JM94_8F2B09RODG.jpg

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

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

作者: ノtrack    时间: 2014-4-1 11:53
if 后面要一条执行语句   你方法也有一条吧            就算if没有干嘛                             方法必须有返回值
作者: osully    时间: 2014-4-1 11:54
不加大括号  你直接把if(this.age==p.age) 删了 这句是废话
作者: 坏米饭    时间: 2014-4-1 11:55
因为你这个函数:public int compareTo (Person p){} 返回值类型写了int,就肯定要有返回值,所以必须有return。你写的return都是在if语句里面的,也就是说返回值都是有判断条件的。而要是if语句条件都不成立(如p=null。),就不能return值了。所以当你加了{},第二个if语句就结束了。下面的return就独立出来,就肯定可以返回值。
作者: yanzhendong    时间: 2014-4-1 11:55
没有返回语句,图一中的第二个if语句为假时没有返回语句,加个大括号的话if和{}组成了一个语句,这样当if为假时一样能返回
作者: yanzhendong    时间: 2014-4-1 11:59
本帖最后由 yanzhendong 于 2014-4-1 12:02 编辑
  1. 改成这样就行了 :return (this.age==p.age)?this.name.compareTo(p.name):(this.age-p.age);
复制代码



作者: yanzhendong    时间: 2014-4-1 12:00
错了,是这样return (this.age==p.age)?this.name.compareTo(p.name):(this.age-p.age);
作者: ehuashao    时间: 2014-4-1 12:03
你的方法返回值是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. }
复制代码

问题解决。
作者: 还是回去火星吧    时间: 2014-4-1 12:57
简单的说     if里的语句有可能执行不到! if是判断,如果! 没有如果~则不会返回结果。




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