黑马程序员技术交流社区

标题: 比较器排序 [打印本页]

作者: clvslyf    时间: 2016-4-8 00:25
标题: 比较器排序
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]
哪里有问题,求大神解答

作者: Hawking    时间: 2016-4-8 12:35
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;
作者: Hawking    时间: 2016-4-8 12:36
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;
作者: Hawking    时间: 2016-4-8 12:59
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的左面,上面是我写的你看看!!


作者: clvslyf    时间: 2016-4-8 22:05
Hawking 发表于 2016-4-8 12:59
public static void main(String[] args) {
                TreeSet ts = new TreeSet(new Comparator() {
                                @Override ...

谢谢大神




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