2015-05-19 2 views
0

Напишите компаратор, который сравнивает объекты Point по их расстоянию от начала координат (0,0). Считается, что точки, которые ближе к происхождению, относятся к тем, которые находятся дальше от начала координат.Компаратор Java Point

Я просто хотел некоторый входной сигнал на, если я нахожусь на правильном пути здесь ... и что я пропускаю

public class PointComparator implements Comparator<Point> 
{ 
    public int compare(Point p1, Point p2) 
    { 
     int dx = p1.x - p2.x; 
     if (dx == 0){ 
      int dy = p1.y - p2.y; 
      return dy; 
     }else{ 
      return dx; 
     } 
    } 
} 
+1

Ничего себе извините за формат моего кода там, новый для размещения здесь – Moondude

+0

Я отредактировал ваш вопрос, чтобы правильно отформатировать код. В следующий раз, пожалуйста, выберите свой код в редакторе и нажмите кнопку '{}' для форматирования в качестве кода. – rgettman

+0

Затем пройдите через [Tour] (http://stackoverflow.com/tour) и [Справочный центр] (http://stackoverflow.com/help). Это поможет вам задавать лучшие вопросы и избегать downvotes. – RealSkeptic

ответ

0

Найти расстояние от начала координат для точек, как:

double r1 = Math.sqrt(x1*x1 + y1*y1) 

Обратите внимание, чтобы удвоить, это не инт. Затем:

return Double.compare(r1, r2); 
1

расстояние между точкой и происхождение SQRT (х в квадрате + у в квадрате) , Вычислите это значение для обеих точек и возьмите разницу для сравнения.

+0

Вы также можете избежать звездочек, таких как '\ *'. –

+0

int dx = sqrt (p1.x^2 + p1.y^2); \t \t int dy = sqrt (p2.x^2 + p2.y^2); \t \t \t \t return dx - dy; – Moondude

+0

Это на правильном пути? Кстати, я ценю вклад всех до сих пор, я могу видеть, насколько полезен этот сайт для меня, продвигаясь вперед – Moondude

0

То, что, я считаю, вы делаете, сравнивается с точками вместе вместо сравнения с источником. Так что лучше вы понимаете, чего хотите перед кодированием. В любом случае расстояние между двумя точками с координатами (x1, y1) и (x2, y2) равно sqrt ((x1-x2)^2 + (y1-y2)^2) одна из координат в вашем случае будет (0,0), т.е. происхождение.

+0

Спасибо. Итак, это то, что у меня есть сейчас – Moondude

+0

public int compare (Point p1, Point p2) \t { \t \t double p1 = Math.sqrt (x1 * x1 + y1 * y1); \t \t double p2 = Math.sqrt (x2 * x2 + y2 * y2); \t \t \t \t возвращение Double.compare (p1, p2); \t} – Moondude

+0

Yup, который должен работать. –

Смежные вопросы