我只是不知道如何解决这个问题。这是我收到的错误消息:
Exception in thread "main" java.lang.NullPointerException
at java.util.Date.getMillisOf(Date.java:939)
at java.util.Date.compareTo(Date.java:959)
at FirstOccComparator.compare(FirstOccComparator.java:11)
at FirstOccComparator.compare(FirstOccComparator.java:1)
at java.util.Arrays.mergeSort(Arrays.java:1270)
at java.util.Arrays.mergeSort(Arrays.java:1281)
at java.util.Arrays.mergeSort(Arrays.java:1281)
at java.util.Arrays.mergeSort(Arrays.java:1281)
at java.util.Arrays.mergeSort(Arrays.java:1281)
at java.util.Arrays.mergeSort(Arrays.java:1281)
at java.util.Arrays.mergeSort(Arrays.java:1281)
at java.util.Arrays.mergeSort(Arrays.java:1281)
at java.util.Arrays.mergeSort(Arrays.java:1281)
at java.util.Arrays.sort(Arrays.java:1210)
at Planner.sort(Planner.java:62)
at Test.main(Test.java:81)
测试@第81行:
p.sort( new FirstOccComparator() );
其中 p 是我制作的规划器类。
Planner.sort @ 第 62 行:
public void sort(Comparator<AbstractEvent> c) {
Arrays.sort(schedule, c);
}
这是我的 FirstOccComparator 类: http://pastebin.com/4FZv4nXf (发布在pastebin上,因为它太宽并且很难在这里格式化)。 在此类中,如果事件多次重复发生,则 hasMoreOccurrences() 返回 true/false。 nextOccurrence() 返回下一次出现的日期。
我很确定我在这里缺少的东西非常简单,我对接口(interface)和比较器类仍然是新手。
感谢您的帮助!
最佳答案
您尚未共享的代码中有一个空 Date 对象...
顺便说一句,您可以大幅减小比较器的大小。本质上你正在做的就是说
if (x<0)
result = -1;
else if (x==0)
result = 0;
else if (x>0)
result = 1;
为什么不直接说 result = x;
或者在您的特定示例中:
public int compare(AbstractEvent event1, AbstractEvent event2) {
int result = 0;
if (event1.hasMoreOccurrences() && event2.hasMoreOccurrences())
result = event1.nextOccurrence().compareTo(event2.nextOccurrence());
return result;
}
可以再次将其缩短为一行(如果这是您的风格):
public int compare(AbstractEvent event1, AbstractEvent event2) {
return (event1.hasMoreOccurrences() && event2.hasMoreOccurrences()) ? event1.nextOccurrence().compareTo(event2.nextOccurrence()) : 0;
}
关于java - 使用可比较的类进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5134406/