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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© tujiu888 中级黑马   /  2016-2-9 21:05  /  992 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int num = o.salary - this.salary;         //为什么工资从高到低排序就是这样写
                num = (num == 0 ? this.age - o.age : num);                 //为什么年龄从低到高就是这样排序
                num = (num == 0 ? this.name.compareTo(o.name) : num);
                num = (num == 0 ? 1 : num);
                return num;

3 个回复

倒序浏览
本帖最后由 宋达思 于 2016-2-12 10:48 编辑

工资的这个salary是你创建的对象的int型的属性吗?我记得一般比较的话首先要确认主要的比较因素和次要的比较因素,你好像主要想比较工资是吧,如果这个salary是int类型的话,当然可以这么写了。然后是比较次要因素,当当前的num等于0时(即两个人的工资相等时)开始比较次要因素:比较age的话因为是基本数据类型,所以可以直接减的;name一般是String,是引用数据类型,所以就要调用方法了,但是最后都是可以返回正整数、负整数或0的。最后通过比较过这些主要次要因素后最后返回num的值,当然如果一上来salary不相等的话,下面应该就都不用比较了。
回复 使用道具 举报
宋达思 发表于 2016-2-12 10:33
工资的这个salary是你创建的对象的int型的属性吗?我记得一般比较的话首先要确认主要的比较因素和次要的比 ...

我的意思是为什么o.salary - this.salary 就是工资从高到低排序
                        this.salary - o.salary 就是工资从低到高排序
回复 使用道具 举报
因为这样的话每两个对象之间的减法结果都变了啊,原本是正整数的结果肯定会变成负整数,你把所有对象添加排序一遍后,整体减法的结果肯定是反的啊,所以当然反着排了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马