Sortowanie listy przy użyciu Colection, problem z implementacją

0

witam, mam kod w którym sortuję ludzi wg zarobków, staram się robić wszystko wg przykładów, lecz kompilator stwierdza że powyższy kod nie implementuje poprawnie interfejsu Compareable<Person>, co jest źle w mojej implementacji?

import java.util.ArrayList;
import java.util.List;
import java.util.Collections;

public class Main {

    public static void main(String[] args) {
        List<Person> people = new ArrayList<Person>();
        people.add(new Person("Matti", 150000));
        people.add(new Person("Pekka", 3000));
        people.add(new Person("Mikko", 300));
        people.add(new Person("Arto", 10));
        people.add(new Person("Merja", 500));
        people.add(new Person("Pertti", 80));
        System.out.println(people);
        /*
         * When you have implemented the compareTo-method, remove comment below.
         */
         //Collections.sort(people);
        System.out.println(people);
    }
}
public class Person implements Comparable<Person> {
    private int salary;
    private String name;

    public Person(String name, int salary) {
        this.name = name;
        this.salary = salary;
    }

    public String getName() {
        return name;
    }

    public int getSalary() {
        return salary;
    }

    @Override
    public String toString() {
        return name + " " + salary;
    }
    
    @Override
    public int compareTo(Person person){
        if (this.salary == person.getSalary())
            return 0;
        else if (this.salary < person.getSalary())
            return 1;
        else return -1;
    }
}
public interface Comparable<Person> {
    int compareTo(Person person);
}
0

public interface Comparable**<Person>**{
}
ekspertem nie jestem ale nawiasów ostrokotnych podczas tworzenia interfejsu nigdy nie spotkałem. Mogę się mylić

Chociaż jak teraz patrzę to taki zapis jest chyba dopuszczalny, jak byś mógł wytłumaczyć co w ten sposób uzyskujemy będe wdzięczny. Pozdrawiam

0

Dziwne, u mnie działa.
https://ideone.com/cI84w1

1

Interfejs Comparable już siedzi w bibliotece standardowej i to jego masz zaimplementować, a nie własnego.

0

zadanie pochodzi z kursu: http://moocfi.github.io/english.html -> Object oriented programming with Java, part 2
i mam w nim za zadanie:
You find the pre-made class Person. People have got name and salary information. Make Person implement the Comparable interface, so that the compareTo method would sort the people according to their salary -- rich first, poor last.

kurs ten działa tak że sprawdza poprawność mojego kodu pożądanym efektem, więc narzuca mi działanie jakie określił twórca, przy sprawdzaniu zauważył w jednym z punktów że nie użyłem nawiasów ostrych(nie było niestety o tym nic w części teoretycznej, a przynajmniej ja nic na ten temat nie zauważyłem pomimo chyba już 10 krotnego jej przeczytania),

vpiotr : mi niestety to nie działa, cały czas widzę komunikat: are you sure that class Person implements interface "Compareable<Person>"?

Wibowit: to właśnie próbuje w tym zadaniu zrobić, z tym że ma to być zrobione przy użyciu interfejsu i stworzonej przeze mnie compareTo metody, próbowałem już czytać na ten temat w wielu źródłach, i ta wersja podobno powinna działać, lecz nie rozumiem dlaczego tak się nie dzieje, tym bardziej że vpiotr pisze że mu ten kod działa

1
TomekM napisał(a):

vpiotr : mi niestety to nie działa, cały czas widzę komunikat: are you sure that class Person implements interface "Compareable<Person>"?

Bo implementujesz swój interfejs zamiast bibliotecznego.

Wibowit: to właśnie próbuje w tym zadaniu zrobić, z tym że ma to być zrobione przy użyciu interfejsu i stworzonej przeze mnie compareTo metody, próbowałem już czytać na ten temat w wielu źródłach, i ta wersja podobno powinna działać, lecz nie rozumiem dlaczego tak się nie dzieje, tym bardziej że vpiotr pisze że mu ten kod działa

Collections.sort wymaga interfejsu java.lang.Comparable a nie jakiegoś podobnego interfejsu o tej samej nazwie.
https://docs.oracle.com/javase/8/docs/api/java/util/Collections.html#sort-java.util.List-

1

Wibowit: to właśnie próbuje w tym zadaniu zrobić, z tym że ma to być zrobione przy użyciu interfejsu i stworzonej przeze mnie compareTo metody, próbowałem już czytać na ten temat w wielu źródłach, i ta wersja podobno powinna działać, lecz nie rozumiem dlaczego tak się nie dzieje, tym bardziej że vpiotr pisze że mu ten kod działa

Collections.sort wymaga implementacji interfejsu Comparable pochodzącego z biblioteki standardowej. Jeśli chcesz mieć własny interfejs Comparable i spełnić pozostałe warunki zadania to musisz klepnąć własną wersję metody Collections.sort, a chyba nie o to chodzi. Kompilator Javy nie wyszukuje klas i interfejsów po samej nazwie klasy czy interfejsu, ale bierze pod uwagę także paczkę. java.util.Comparator to zupełnie inny interfejs niż my.example.Comparator nawet jeśli wyglądają podobnie.

aktualizacja:
@vpiotr mnie ubiegł

0

dziękuję za pomoc, pomogło usunięcie mojego interfejsu i dodanie ścieżki(co zrobił za mnie edytor, gdy zacząłem implementowałem Compareable, mam mały problem z jego usunięciem):

public class Person implements java.lang.Comparable<Person> {

Wibowit, wybacz nie zrozumiałem twojej podpowiedzi, źle zrozumiałem wprowadzenie teoretyczne do ćwiczenia i cały czas uważałem że muszę sam napisać własny interfejs, który mam zaimplementować, a potem się dziwiłem dlaczego nic nie działa choć w 9 innych przykładach podobny kod działał

1 użytkowników online, w tym zalogowanych: 0, gości: 1