黑马程序员技术交流社区
标题: 谁能解释一下 [打印本页]
作者: 马儿不吃草 时间: 2016-4-8 11:30
标题: 谁能解释一下
(1)定义一个TreeSet集合,然后存入6个Double类型的数据,分别是[1.1,5.2,6.3,2.5,5.2,3.3]
(2)不去重,然后遍历输出(从大到小)
public static void main(String[] args) {
TreeSet<Double> ts = new TreeSet<>(new Comparator<Double>() {
@Override
public int compare(Double d1, Double d2) {
int num = (int)(d2 - d1);
return num == 0 ? 1 : num;
}
});
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
2.5
3.3
1.1
作者: Hawking 时间: 2016-4-8 12:17
public int compare(Double d1, Double d2) {
int num = (int)(d2 - d1);
return num == 0 ? 1 : num;
}
这里应该是:
int num = (int )(d1 - d2);
return num == 0? 1:num;
如果是从小到大是:d1 - d2
从大到小是:d2 - d1
作者: 马儿不吃草 时间: 2016-4-8 12:27
要求的从大到小,我纠结的是,为什么2.5会排在3.3的前面
作者: Hawking 时间: 2016-4-8 13:01
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的左面,上面是我写的你看看!!
作者: 马儿不吃草 时间: 2016-4-8 13:14
嗯.好了.没注意这块的问题,感谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |