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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qy 黑马帝   /  2011-11-10 16:48  /  2421 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

关于学生成绩排序 大家看以下代码:

注:该类实现了Comparable接口
  1.   public String name;
  2.   public int score;
  3.   public int compareTo(类 a)
  4. {
  5.   int num=new Integer(this.score).compareTo(new Integer(a.score);
  6.   if(num==0)
  7.   return this.name.compareTo(a.name);
  8.   return score;
  9. }
复制代码
问题来了 --> 两个分数比较后返回的一个整数 num,那么这个num具体指的是什么?
还有就是if(num==0) 的条件的意义?

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

5 个回复

倒序浏览
你上面程序return score不对吧, 应该是return num; 你是想根据2个对象的score来排序,if(num==0)表示两个对象的score相等,就无法排序了,
就在根据对象的name属性排序,是根据num的值是>0,还是<0,还是 ==0 来排序的

评分

参与人数 1技术分 +1 收起 理由
杨玉揆 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 olkldksl 于 2011-11-10 18:48 编辑

首先实现了comparable就是为了把这个类的对象往TreeSet集合里存放做准备
num可以理解成
num = this.score-a.score;
如果num等于0,说明成绩相等,再判断名字的自然排序;
如果num不等于0,就返回num的值,让TreeMap容器根据这个值的正负去给存入的对象进行排序

评分

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

查看全部评分

回复 使用道具 举报
这个类实现了Comparable接口,覆盖了compareTo方法,有两个判断条件,一个按照分数,分数相同按姓名,return score;这句错误,如果不相同返回的应该是num;

评分

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

查看全部评分

回复 使用道具 举报
qy 黑马帝 2011-11-10 19:21:03
报纸
赵玉成 发表于 2011-11-10 18:25
你上面程序return score不对吧, 应该是return num; 你是想根据2个对象的score来排序,if(num==0)表示两个 ...

对、应该是return num的。理解 谢咯
回复 使用道具 举报
num可以是正数、负数、零,如果是正数则该分数的对象会排在后面。
这个其实写的麻烦了直接写 num=this.score-a.score 就容易理解了 值是正的说明this.score大于a.score所以排后面,a排在前面。如果是零表示两人分数相同,则比较两人姓名按自然顺序排序。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马