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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 张向辉 于 2013-1-23 10:43 编辑

public int compareTo(Object obj)
{
if(!(obj instanceOf student))
throw new RuntimeException("不是学生类型");
Student s = (Student)obj
if(this.age>s.age)
return 1;
if(this.age==s.age)
return this.name.compareTo(s.name);
return -1;
}
这是毕老师讲到HashSet集合,关于一个对象实现Compareble,覆盖copareTo的代码,里面的判断用到了是if{},if{},ruturn -1.
而之前讲到的关于if的格式都是if{}或着if{},else{}或者if{},elseif{}..else{}
而没有代码中毕老师讲的那种形式,我第一次看毕老师讲,觉得很别扭,但是运行是正确的,自己又想不通,如果大家遇到这种类似的问题(看到的东西和自己平常所知道的不一样,说他错,又说不出原因,说他对又和自己知道的不一样)是怎么处理的,是把他当做一种新的形式记下来,还是自己按照自己的做(比如此处我觉得为什么不写成if{}elseif{}else{})
还是我想多了啊

评分

参与人数 1技术分 +1 收起 理由
黄锦成 + 1 鼓励一下

查看全部评分

5 个回复

倒序浏览
我们学习,应该举一反三,多加思考,其实新的写法都是应用的老知识,就像楼主举得例子,你可以将两个if 分开想,那样不就是学过的老知识了嘛!
我相信,天道酬勤,路虽远,行则必近

评分

参与人数 1黑马币 +6 收起 理由
舒远 + 6

查看全部评分

回复 使用道具 举报
本帖最后由 焦健 于 2013-1-22 22:11 编辑

同学,这就是好多个if(x>0){}这种形式组成的啊。如果if判断语句后面只有一句话可以不写花括号的,这个判断语句会在遇到第一个分号的时候结束。
如:if(this.age==s.age)
return this.name.compareTo(s.name);,这是一句,所以花括号可以不写,老毕讲的时候只是建议初学者都写上,可以增强阅读性。
如果还不明白建议复习一下基础判断语句部分。有好的基础学习起来更容易一些。
如果写成if(){}else{}else{},那么三局中必然有一句会执行,而且只有一句能够执行,老毕这样的写法就是三条if语句之间没有关系,可以都执行,也可以都不执行的。

评分

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

查看全部评分

回复 使用道具 举报
public int compareTo(Object obj)
{
if(!(obj instanceOf student))
throw new RuntimeException("不是学生类型");
Student s = (Student)obj
if(this.age>s.age)
return 1;//////这里就返回了....写else也没必要吧....这是为了简写
if(this.age==s.age)//这里写else和if效果都一样....上面if 是真的话也执行不到这里...不是真的话都会执行这里的..所以这是书写简单的方便
return this.name.compareTo(s.name);
return -1;
}

评分

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

查看全部评分

回复 使用道具 举报
这是代码简写的形式,也是代码重构的一种体现。
写多了自然就 会习惯这种写法的,形式上不必太在乎,核心在于你能否理解这种简写的形式。
楼上和楼上的楼上的哥们都回答的很靠谱了。
回复 使用道具 举报
其实这些写法挺灵活的,都是判断,你也可以把它改成if else if的。这些写多了,自然就熟悉了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马