2017-02-06 20 views
-1

У меня есть класс Coordinates, и я хочу сделать объект Coordinates сопоставимым.Java Override CompareTo метод

public class Coordinates implements Comparable<Coordinates> { 

private int row; 
private int column; 

Идея состоит в том, чтобы вставлять объекты координат в PriorityQueue и сортировать их.

@Override 
public int compareTo(Coordinates o) { 
    if (row < o.row) { 
     return row; 
    } 
    if (row > o.row) { 
     return o.row; 
    } 
    if (row == o.row) { 
     if (column < o.column) { 
      return column; 
     } 
     if (column > o.column) { 
      return o.column; 
     } 
    } 
// return 0; 
} 

Это моя попытка, но я не уверен, что именно я ожидаю вернуться и как ее вернуть. Я хочу, чтобы мои наименьшие координаты имели наивысший приоритет. А функция я до сих пор написал ожидает возвращаемое значение - комментируемой строке

+3

Самый маленький в каком смысле? Например, как следует «(1, 2)» сравнивать с «(2, 1)»? –

+0

Вы можете вычислить расстояние от '(0, 0)' для каждого объекта, а затем использовать его для сравнения. – ByeBye

+0

Я хочу, чтобы 0,5 имел наивысший приоритет, чем 1,5 и 1,0, чтобы иметь более высокий приоритет, чем 1,3 –

ответ

1

Я хочу 0,5 имеют наивысший приоритет, чем 1,5 и 1,0, чтобы иметь более высокий приоритет, чем 1,3

Фактически вы хотите иметь обратную сортировку. Однако приоритетная очередь сначала помещает наименьшие значения, поэтому естественный порядок сначала отображает самые низкие значения.

Вы хотите вернуть < 0 меньше, чем и> 0 для более

@Override 
public int compareTo(Coordinates o) { 
    if (row < o.row) return -1; 
    if (row > o.row) return +1; 

    if (column < o.column) return -1; 
    if (column > o.column) return +1; 
    return 0; 
} 

Вы можете упростить это с Integer.compare

@Override 
public int compareTo(Coordinates o) { 
    int cmp = Integer.compare(row, o.row); 
    if (cmp == 0) 
     cmp = Integer.compare(column, o.column); 
    return cmp; 
} 

Примечание: если предположить, что строки и столбца являются не- отрицательный вы можете написать

@Override 
public int compareTo(Coordinates o) { 
    int cmp = row - o.row; 
    if (cmp == 0) 
     cmp = column - o.column; 
    return cmp; 
} 
+2

[Комментарии заархивированы в чате] (http: /chat.stackoverflow.com/rooms/135053/discussion-on-answer-by-peter-lawrey-java-override-compareto-method). –

-2
if (row < o.row) { 
    return row; 
} 
else if (row > o.row) { 
    return o.row; 
} 
else 
{ 
    if(row == o.row) 
    { 

     if (column < o.column) { 
      return column; 
     } 
     if (column > o.column) { 
      return o.column; 
     } 
    } 
} 

Закрепить если-то еще Brach, надеюсь, что вы получаете возвращения отсутствуют ошибки синтаксиса

+0

Это не решение для этого ... – ByeBye

+0

И функция, которую я написал, все еще ожидает возвращаемого значения - прокомментированная строка – ShayHaned

+0

Я имею в виду, что вы должны шутить на этом потом :) – ShayHaned