双类型比较器

2022-08-31 16:30:20

我写了以下代码:

public class NewClass2 implements Comparator<Point>
{
    public int compare(Point p1, Point p2)
    {
        return (int)(p1.getY() - p2.getY());
    }
}

如果我假设有两个双精度数,则差值应该是。但是,当我将数字转换为int时,差异最终为,这是不正确的。3.2 - 3.10.10

因此,我需要返回一个双精度值,而不是一个 int。问题是,我的领域是双重的。我该如何解决这个问题?compare()getX


答案 1

我建议你使用内置方法Double.compare()。如果您需要一个范围来使双精度值相等,则可以首先使用chcek。

return Double.compare(p1.getY(), p2.gety());

if(Math.abs(p1.getY()-p2.getY()) < ERR) return 0;    
return Double.compare(p1.getY(), p2.gety());

使用<和>的问题在于,NaN在这两种情况下都会返回false,从而导致可能的处理不一致。例如,NaN被定义为不等于任何东西,甚至在@suihock和@Martinho的解决方案中,如果任何一个值为NaN,则该方法每次都会返回0,这意味着NaN等于一切。


答案 2

您不需要返回 。double

该接口用于为要比较的元素建立顺序。具有使用的字段与此排序无关。Comparatordouble

您的代码很好。

对不起,我错了,再次阅读问题,这就是你需要的:

public class NewClass2 implements Comparator<Point> {
    public int compare(Point p1, Point p2) {
        if (p1.getY() < p2.getY()) return -1;
        if (p1.getY() > p2.getY()) return 1;
        return 0;
    }    
}

推荐