Я звоню Arrays.sort(schedule, c);
, где c - это экземпляр компаратора, подобный так:
import java.util.Comparator;
public class FirstOccComparator implements Comparator<AbstractEvent> {
public int compare(AbstractEvent event1, AbstractEvent event2) {
int result = 0;
if (event1 == null || event2 == null) {
//System.out.println("null");
}
else if (event1.hasMoreOccurrences() && event2.hasMoreOccurrences()) {
result = event1.nextOccurrence().compareTo(event2.nextOccurrence());
}
return result;
}
}
Вывод, который я получаю, не тот, каким он должен быть.Мне интересно, если кто-то может указать мне правильное направление здесь.Это первый алгоритм сортировки, который я когда-либо делал, и он использует концепции, которые все еще являются новыми для меня (компараторы и реализация), поэтому извините за многочисленные вопросы, касающиеся моего кода:)
РЕДАКТИРОВАТЬ В этом разница между выходными данными: http://pastebin.com/LWy1jqkt
Существует два вида событий: методы hasMoreOccurrence () и nextOccurrence ():
DailyEvent
public boolean hasMoreOccurrences() {
boolean result = false;
Date check = nextOccurrence();
timesCalled--;
if (check instanceof Date && check != null) {
result = true;
}
return result;
}
public Date nextOccurrence() {
if (timesCalled > recurrences) {
return null;
}
else {
Calendar cal = Calendar.getInstance();
cal.setTime(startTime);
cal.add(Calendar.DATE, timesCalled);
timesCalled++;
return cal.getTime();
}
}
WeeklyEvent
public boolean hasMoreOccurrences() {
Date tmp = nextOccurrence();
timesCalled--;
boolean result = false;
if (tmp instanceof Date && tmp != null) {
result = true;
}
return result;
}
public Date nextOccurrence() {
Calendar cal = Calendar.getInstance();
cal.setTime(startTime);
cal.add(Calendar.DATE, timesCalled*7);
if (cal.getTime().compareTo(this.endTime) > 0) {
return null;
}
else {
timesCalled++;
return cal.getTime();
}
}