Próbuję napisać algorytm, który używa kolejki o priorytecie min, więc rozejrzałem się po Google i znalazłem PriorityQueue. Wydaje się, że aby go użyć, będę musiał powiedzieć, jak chcę, aby był priorytetowy, i że sposobem na to jest porównanie z komparatorem (chcę porównać konkretne pola danych mojego "Węzła 1" obiekty). Więcej googlowania przedstawiło ideę stworzenia nowego komparatora, który implementuje Komparator, ale zastępuje metodę porównywania. Co staram się to (i inne odmiany tego również):Implementowanie Java Comparator
import java.util.Comparator;
public class distComparator implements Comparator {
@Override
public int compare(Node1 x, Node1 y){
if(x.dist<y.dist){
return -1;
}
if(x.dist>y.dist){
return 1;
}
return 0;
}
}
Protesty kompilatora z kilku powodów, z których jeden jest to, że nie mam zbyt jeździł klasa komparatora (który mówi, że jest to streszczenie)
error: distComparator is not abstract and does not override abstract method compare(Object,Object) in Comparator
Zmieniłem go, aby powiedzieć "porównaj (obiekt x, obiekt y)", który zajmuje się tym problemem. W tym momencie kompilator narzeka jednak, że nie może znaleźć zmiennej "dist" w x lub y - co ma sens, ponieważ są one częścią mojej klasy Node1, a nie klasy Object.
Jak to ma działać? Najprawdopodobniej powinien mieć typ Object
, ale jak skierować go do właściwej zmiennej?
Można również napisać 'x.dist powrotny - y.dist' – Polygnome
@Polygnome: W zależności od zakresów zaangażowanych ten może lub nie działa dla liczb całkowitych, ale jest kompletnym non-starterem dla wartości zmiennoprzecinkowych. – NPE
Dziękujemy! Rozwiązany! –