2012-04-10 16 views
5

Ich muss Termine nach Datum und Uhrzeit bestellen. Ich habe eine ArrayList von Terminen und habe versucht, einen Komparator zu erstellen, um ihre Daten und Zeiten zu vergleichen. Ich versuche, die Collections.sort-Methode zu verwenden, indem ich ihr die ArrayList von Appointments und den von mir erstellten AppointmentComparator übergebe. Beim Kompilieren bekomme ich eine "Keine geeignete Sortiermethode". Hier ist ein Link auf die volle Fehlermeldung vom Compiler generiert: http://prntscr.com/7y4qbMit Comparator ArrayList Java bestellen

Vergleicher:

public class AppointmentComparator implements Comparator<Appointment> 
{ 
public int compare(Appointment a, Appointment b) 
{ 
    if (a.getDay() < b.getDay()) 
     return -1; 

    if (a.getDay() == b.getDay()) 
    { 
     if (a.getStart() < b.getStart()) 
      return -1; 
     if (a.getStart() > b.getStart()) 
      return 1; 
     return 0; 
    } 

    return 1; 
} 

Zeile mit Syntaxfehler:

Collections.sort(book, new AppointmentComparator()); 

variable Buch ist eine Arraylist von Terminen. ArrayList<Appointment>

AppointmentBook Klasse:

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

public class AppointmentBook 
{ 
private ArrayList<Appointment> book; 

public AppointmentBook() 
{ 
    book = new ArrayList<Appointment>(); 
} 

public void addAppointment(Appointment appt) 
{ 
    book.add(appt); 
    Collections.sort(book, new AppointmentComparator()); 
} 

public String printAppointments(int day) 
{ 
    String list = ""; 

    for (int i = 0; i < book.size(); i++) 
    { 
     if (book.get(i).getDay() == day) 
     { 
      list = list + "Appointment description: " + book.get(i).getDescription() + "\n" + "Date of Appointment: " + 
      book.get(i).getDay() + "\n" + "Time: " + book.get(i).getStart() + " - " + book.get(i).getEnd() + "\n" + "\n"; 
     } 
    } 

    return list; 
} 

Terminklasse:

public class Appointment 
{ 
private String desc; 
private int day; //in format mmddyyyy 
private int start; //in format hhmm 
private int end; //in format hhmm 

public Appointment(String description, int aptDay, int startTime, int endTime) 
{ 
    desc = description; 
    day = aptDay; 
    start = startTime; 
    end = endTime; 
} 

public String getDescription() 
{ 
    return desc; 
} 

public int getDay() 
{ 
    return day; 
} 

public int getStart() 
{ 
    return start; 
} 

public int getEnd() 
{ 
    return end; 
} 

}

+1

Können Sie die gesamte AppointmentComparator-Klasse für uns veröffentlichen? Möglicherweise liegt ein Problem in der Klassendefinition selbst vor, und wir können nur ohne einen Compilerfehler/die Klassendefinition spekulieren. –

+1

Können Sie vor dem Aufruf von Collections.sort() auch angeben, wie Sie die Buchvariable definiert haben? –

+0

Ok aktualisiert, um die gesamte Klasse zu enthalten – Legendish

Antwort

3

Von der Fehlermeldung es, wie Sie die Schnittstelle als Umsetzung vergessen zu erklären, um Ihren Komparator aussieht:

public class AppointmentComparator implements Comparator<Appointment> {} 

Es muss den Teil "implements" haben, nicht nur die Methode enthalten.

+0

Sorry, ich habe das ursprünglich nicht hinzugefügt, aber ja, es war dort und ich bekomme immer noch den Fehler – Legendish

+0

@ user1323008 - alles neu kompilieren? Wenn nicht, posten Sie den vollständigen Code –

+0

Ill poste den vollständigen Code in die AppointmentBook-Klasse, wo ich den Fehler habe. Ich weiß sicher, dass der Vergleicher korrekt ausgeführt wurde. – Legendish

0

scheint, dass Sie nicht der Komparator-Schnittstelle für Ihre AppointmentComparator

1

Sie benötigen eine neue werfen AppointmentComparator

Collections.sort(book, new (Comparator)AppointmentComparator()); 
0

Auch können wir für einige Fälle innere Klasse verwenden, implementiert haben:

public int indexOfLargest(ArrayList<QuakeEntry> Data) { 
    Comparator<QuakeEntry> cmtr = new Comparator<QuakeEntry>() { 
     @Override 
     public int compare(QuakeEntry t, QuakeEntry t1) { 
      if (t.getMagnitude() < t1.getMagnitude()) 
       return -1; 
      if (t.getMagnitude() == t1.getMagnitude()) 
       return 1; 
      if (t1.getMagnitude() > t1.getMagnitude()) 
       return 0; 
     return 1; 
     } 
    }; 

    QuakeEntry max = Collections.max(Data, cmtr); 
    int maxIndex = Data.indexOf(max); 
    //---------------------------------------------------------------------- 
    System.out.println("//---------------------------------------------------"); 
    System.out.println("ArrayList sorted by Magnitude using inner class with Comparator"); 
    System.out.println("//---------------------------------------------------"); 
    Collections.sort(Data, cmtr); 
    for (QuakeEntry qe : Data) { 
     System.out.println(qe); 
    } 


    return maxIndex; 
} 

Code für alle Klassen: https://github.com/Evegen55/Java_DukeEdu_Coursera_2/blob/master/Earthquakes_Programming%20and%20Interfaces/src/earthquakes_programming_and_interfaces/QuakeEntry.java