Метод compare
должен возвращать int
. Это число, которое либо:
- Меньше , чем ноль, если первое значение меньше , чем второе;
- равно нулю, если два значения равны ;
- Больше , чем ноль, если первое значение на больше , чем второе;
Вам не нужно , чтобы вернуть double
. Вы должны вернуть int
для реализации интерфейса Comparator
. Вы просто должны вернуть правильный int
, в соответствии с правилами, изложенными выше.
Вы не можете просто привести из int, так как, как вы сказали, разница в 0,1 приведет к 0. Вы можете просто сделать это:
public int compare(Point p1, Point p2)
{
double delta= p1.getY() - p2.getY();
if(delta > 0) return 1;
if(delta < 0) return -1;
return 0;
}
Но так как сравнение значений с плавающей точкой всегда проблематично, вы должны сравнить в определенном диапазоне (см. этот вопрос ), что-то вроде этого:
public int compare(Point p1, Point p2)
{
double delta = p1.getY() - p2.getY();
if(delta > 0.00001) return 1;
if(delta < -0.00001) return -1;
return 0;
}