此处制定的算法具有O(n ^ 2)(插入排序)的复杂度。算法得到NullPointerException
,因为null
数组中有String
个元素。如何让我的算法使用null元素对数组进行排序?算法如下:
private void sortFlowers(String flowerPack[]) {
// TODO: Sort the flowers in the pack (No need to display
// them here) - Use Selection or Insertion sorts
// NOTE: Special care is needed when dealing with strings!
// research the compareTo() method with strings
String key;
for (int j = 1; j < flowerPack.length; j++) { //the condition has changed
key = flowerPack[j];
int i = j - 1;
while (i >= 0) {
if (key.compareTo(flowerPack[i]) > 0) { //here too
break;
}
flowerPack[i + 1] = flowerPack[i];
i--;
}
flowerPack[i + 1] = key;
}
}
答案 0 :(得分:3)
如果key
可以为null,那么您应该更改此条件:
key.compareTo(flowerPack[i]) > 0
类似于:
compareKeys(key, flowerPack[i]) > 0
然后添加null
- 安全检查,例如:
private int compareKeys(final String first, final String second) {
if (first == null || second == null) {
return 0; // TODO: 0, here?
} else {
return first.compareTo(second);
}
}
答案 1 :(得分:1)
compareTo()
是Comparable
界面的一部分。它没有用于将null与任何东西进行比较的已定义行为。它实际上不能具有该行为,因为a.compareTo(b)
和b.compareTo(a)
需要保持一致。你可以:
1)实现知道如何比较空值的自定义Comparator
,然后将key.compareTo(flowerPack[i])
替换为myComparator.compare(key, flowerPack[i])
3)因为这看起来像是家庭作业,所以如果 {em} while
和compareTo()
,请将key
外观中的位重写为仅使用flowerPace[i]
是非空的。如果其中任何一个(或两个)都为空,则需要特殊情况。