【发布时间】:2012-10-02 03:22:18
【问题描述】:
我正在努力使二进制搜索的比较器在对象数组上工作。本质上,目标是搜索参差不齐的数组以找到项目的第一个匹配项或最接近的匹配项以提供插入点。该方法传入一个泛型(这是不可更改的 - 因为这是家庭作业),但你不能创建泛型类型的数组......所以,我的比较器抛出一个错误:“方法 binarySearch(Object[], Object) in类型数组不适用于参数 (Object[], E, Comparator)”。也许我需要转换通用元素“项目”?我不知道。代码:
private Location findFirst(E item) {
Location current;
int closestMatchArray1;
int closestMatchArray2;
Object[] firstItemInArray2 = new Object[numArrayInUse];
Object firstItem;
Comparator<E> comparator = new CompareElement();
for (int i - 0; i < numArrayInUse; i++) {
firstItem = topArray[i];
firstItemInArray2[i] = firstItem;
}
closestMatchArray1 = Arrays.binarySearch(firstItemInArray2, item, comparator);
次要但相关的问题。在比较器中,我试图调用 Comparable 方法“compareTo”来获取一个负整数,该整数给出了一个项目在失败搜索时位于数组中的大致位置,但同样,我遇到了麻烦使用泛型,出现此错误:“未定义类型 E 的方法 compareTo(E)”。代码:
public class CompareElement implements Comparator<E> {
public int compare(E firstItem, E secondItem) {
return firstItem.compareTo(secondItem);
}
}
【问题讨论】:
-
您能否准确告诉我们您收到了哪些错误消息以及何时/何地?
-
不能使用 List,虽然它会很好。错误消息是:“数组类型中的方法 binarySearch (Object[], Object) 不适用于参数 (Object[], E, Comparator
)。并且“方法 compareTo(E) 未定义键入 E"。 -
@KingTriumph - 使用该错误更新您的帖子。
-
你有一个名为
E的类吗? -
“未定义类型 E 的方法 compareTo(E)”。
compareTo是来自Comparable的方法。在您的CompareElement类中,必须声明E,即public class CompareElement<E extends Comparable> implements Comparator<E>
标签: java arrays generics search binary