我有一个甲板等级的枚举。我将这些Ranks添加到一个数组中。当我使用Arrays.sort使用自定义比较器对数组进行排序时,它没有排序而是返回了这个:
Exception in thread "main" java.lang.NullPointerException at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:291) at java.util.ComparableTimSort.sort(ComparableTimSort.java:171) at java.util.ComparableTimSort.sort(ComparableTimSort.java:146) at java.util.Arrays.sort(Arrays.java:472) at HW3.Deck.sort(Deck.java:69) at HW3.War.main(War.java:100) Java Result: 1
有什么建议吗?谢谢
贝娄是代码:
@Override ` public int compareTo(PlayingCard o) { if (this==o) return 0; if(this.getSuit()!=o.getSuit()){ return this.suit.compareTo(o.getSuit()); } else { return this.rank.compareTo(o.getRank()); } }
答案 0 :(得分:0)
如果您使用Arrays.sort(T[], Comparator),则必须自行处理 null 值。
示例强>
Arrays.sort(enums, new Comparator<Rank>>() {
@Override
public int compare(Rank o1, Rank o2) {
if (o1 == o2) {
return 0;
}
// Put NULL to the end.
if (o1 == null) {
return 1;
}
if (o2 == null) {
return -1;
}
return o1.compareTo(o2); // sort by ordinal
}
});