package apc.dastruc.algorithms;
public class BinarySearch<K>{
public void bubbleSorting(K[] haystack){
int j = 0;
int i = 0;
int temp;
while(j < (haystack.length - j)){
while (i < (haystack.length - 1)){
if(haystack[i] > haystack[i + 1]){
temp = haystack[i];
haystack[i] = haystack[i - 1];
haystack[i - 1] = temp;
}
}
}
}
public int search(K[] haystack, K needle){
bubbleSorting(haystack);
int i = haystack.length / 2;
while(i > 0 && i > haystack.length){
if(needle.equals(haystack[i])){
return i;
}else if(needle < haystack[i]){
i--;
}else if(needle > haystack[i]){
i++;
}
}
return -1; //no match is found
}
}
问题是我们需要让它们成为泛型。所以我真的只能将他们的类型改为int。
答案 0 :(得分:5)
如果K实现了Comparable,那么你可以这样做:
if(needle.compareTo(haystack[i]) == 0){
return i;
} else if(needle.compareTo(haystack[i]) > 0){
i--;
} else {
i++;
}
您的代码也希望强制K实现Comparable以便执行此操作,即:
public class BinarySearch<K extends Comparable<K>>
我想你可能想看看Comparable界面。
答案 1 :(得分:2)
在这一行中,您尝试使用K
运算符比较两个>
类型的对象:
if(haystack[i] > haystack[i + 1]){
这不起作用,因为您无法将任意对象与>
进行比较。
解决此问题的一种方法是对类型K
设置约束,指定它必须是实现Comparable<K>
的类型,然后使用Comparable
的方法进行比较对象:
public class BinarySearch<K extends Comparable<K>> {
public void bubbleSorting(K[] haystack){
// ...
if (haystack[i].compareTo(haystack[i + 1]) > 0) {
// ...
}
}
}