在写PTA Basic 1020 月饼,进行重写排序时发现,当排序的数据出现无限小数,与无限小数整数部分相同的数,即如4.166666666667与4.5, 2.6999999999与2.800000000000003同时存在时,重写的排序就无法比较。当整数部分不相同时,排序比较又正常。
。
public class Basic20_2 {
public static void main(String[] args) {
ArrayList<MoonCake1> list=new ArrayList<>();
list.add(new MoonCake1("3","8.1"));
list.add(new MoonCake1("3","8.4"));
list.add(new MoonCake1("10","75"));
System.out.println(list.get(0).danjia>list.get(1).danjia);
Collections.sort(list, new Comparator<MoonCake1>() {
@Override
public int compare(MoonCake1 moonCake1, MoonCake1 t1) {
if( (int)moonCake1.danjia>(int)t1.danjia){
return -1;
}
else {
return 1;
}
}
});
System.out.println(list);
}
}
class MoonCake1 {
public double kucun;
public double shoujia;
public double danjia;
public MoonCake1(String kucun, String shoujia) {
this.kucun = Double.parseDouble(kucun);
this.shoujia = Double.parseDouble(shoujia);
// double sss=this.shoujia/this.kucun;
// String str=String.format("%.2f",sss);
// danjia=Double.parseDouble(str);
danjia=this.shoujia/this.kucun;
}
@Override
public String toString() {
return "MoonCake1{" +
"kucun=" + kucun +
", shoujia=" + shoujia +
", danjia=" + danjia +
'}';
}
}
有没有UU解释下根本原因,优化下代码捏?
class MoonCake implements Comparable<MoonCake>{
public double kucun;
public double shoujia;
public double danjia;
public MoonCake(String kucun, String shoujia) {
this.kucun = Double.parseDouble(kucun);
this.shoujia = Double.parseDouble(shoujia);
danjia=this.shoujia/this.kucun;
}
@Override
public String toString() {
return "MoonCake{" +
"kucun=" + kucun +
", shoujia=" + shoujia +
", danjia=" + danjia +
'}';
}
@Override
public int compareTo(@NotNull MoonCake moonCake) {
return moonCake.danjia-this.danjia>0?1:-1;
}
}
在自定义类实现接口comparable,调用collection.sort即可解决。(虽然不知道为甚)