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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© clvslyf 中级黑马   /  2016-4-8 00:25  /  471 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void main(String[] args) {
  TreeSet<Double> ts = new TreeSet<Double>(new Comparator<Double>() {
   @Override
   public int compare(Double d1, Double d2) {
    double d=d2-d1;
    int num=(int)d;
    return num==0 ? 1: num;                 //?有问题,输出结果不对[6.3, 5.2, 5.2, 4.3, 2.5, 3.3, 1.1]
   }
  });
  ts.add(1.1);
  ts.add(5.2);
  ts.add(6.3);
  ts.add(2.5);
  ts.add(5.2);
  ts.add(3.3);
  ts.add(4.3);
  System.out.println(ts);
}
比较器重写不对吗,为什么重写后结果是[6.3, 5.2, 5.2, 4.3, 2.5, 3.3, 1.1]
哪里有问题,求大神解答

4 个回复

倒序浏览
public int compare(Double d1, Double d2) {
    double d=d2-d1;
    int num=(int)d;
    return num==0 ? 1: num;                 //?有问题,输出结果不对[6.3, 5.2, 5.2, 4.3, 2.5, 3.3, 1.1]
   }

从小到大这里应该是:
double d=d1-d2;
    int num=(int)d;
从大到小才是:
double d=d2-d1;
    int num=(int)d;
回复 使用道具 举报
public int compare(Double d1, Double d2) {
    double d=d2-d1;
    int num=(int)d;

    return num==0 ? 1: num;                 //?有问题,输出结果不对[6.3, 5.2, 5.2, 4.3, 2.5, 3.3, 1.1]
   }

从小到大这里应该是:
double d=d1-d2;
    int num=(int)d;

从大到小才是:
double d=d2-d1;
    int num=(int)d;
回复 使用道具 举报
public static void main(String[] args) {
                TreeSet<Double> ts = new TreeSet<>(new Comparator<Double>() {
                                @Override
                                public int compare(Double o1, Double o2) {
                                        // TODO Auto-generated method stub
                                        int i = 1 ;
                                        double d = o2 -o1 ;
                                        if(d>0)
                                                i = 1 ;
                                        if(d<0)
                                                i = -1 ;
                                        return i;
                                }
                        }) ;               
    ts.add(1.1);
    ts.add(5.2);
    ts.add(6.3);
    ts.add(2.5);
    ts.add(5.2);
    ts.add(3.3);
    for (Double d : ts) {
            System.out.println(d);
    }
        }
}
结果:
6.3
5.2
5.2
3.3
2.5
1.1
刚才看错了,,,因为double转换到int 是会丢失数据,,(3.3-2.5=0.8);0.8是double类型换到int时时0;而你给了1;所以3.3会放在2.5的左面,上面是我写的你看看!!

回复 使用道具 举报 1 0
Hawking 发表于 2016-4-8 12:59
public static void main(String[] args) {
                TreeSet ts = new TreeSet(new Comparator() {
                                @Override ...

谢谢大神
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马