2012-04-10 31 views
5

Tôi phải sắp xếp Cuộc hẹn theo ngày giờ. Tôi có một ArrayList của cuộc hẹn và đã cố gắng tạo ra một so sánh để so sánh ngày tháng và thời gian của họ. Tôi đang cố gắng sử dụng phương thức Collections.sort, chuyển nó qua ArrayList của các cuộc hẹn và AppointmentComparator mà tôi đã tạo ra. Khi biên dịch tôi nhận được một "Không có phương pháp phù hợp để sắp xếp." Dưới đây là một liên kết đến thông báo lỗi đầy đủ tạo ra bởi trình biên dịch: http://prntscr.com/7y4qbSử dụng Bộ so sánh để đặt hàng ArrayList Java

sánh:

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; 
} 

Line với lỗi cú pháp:

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

biến cuốn sách là một ArrayList của cuộc hẹn. ArrayList<Appointment>

AppointmentBook lớp:

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; 
} 

Bổ nhiệm lớp:

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

Bạn có thể đăng toàn bộ lớp AppointmentComparator cho chúng tôi không? Có thể có một vấn đề trong định nghĩa lớp chính nó, và chúng ta chỉ có thể suy đoán mà không có một lỗi trình biên dịch/định nghĩa lớp chính nó. –

+1

Bạn cũng có thể đăng cách bạn định nghĩa biến sách trước khi gọi Collections.sort() không? –

+0

Ok được cập nhật để bao gồm toàn bộ lớp học – Legendish

Trả lời

3

Từ thông báo lỗi có vẻ như bạn quên khai báo so sánh của bạn như thực hiện giao diện:

public class AppointmentComparator implements Comparator<Appointment> {} 

Nó cần phải có phần thực hiện, không chỉ chứa phương pháp.

+0

Xin lỗi tôi đã không thêm vào ban đầu, nhưng có nó đã có và tôi vẫn nhận được lỗi – Legendish

+0

@ user1323008 - biên dịch lại tất cả mọi thứ? nếu không, hãy viết mã đầy đủ –

+0

Tôi sẽ đăng mã đầy đủ vào lớp AppointmentBook, đây là nơi tôi gặp lỗi. Tôi biết chắc chắn Comparator được thực hiện một cách chính xác. – Legendish

0

Có vẻ bạn đã không được thực hiện Giao diện so sánh cho AppointmentComparator bạn

1

Bạn cần phải cast AppointmentComparator mới của bạn

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

Ngoài ra chúng tôi có thể sử dụng lớp bên trong đối với một số trường hợp:

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; 
} 

mã cho tất cả các lớp: https://github.com/Evegen55/Java_DukeEdu_Coursera_2/blob/master/Earthquakes_Programming%20and%20Interfaces/src/earthquakes_programming_and_interfaces/QuakeEntry.java