Java &引用;运营商>;对于参数类型K,K";未定义;我不断得到这个,我可以';我修不好 封装apc.dastruc.algorithms; 公共类二进制搜索{ 公共空间泡泡运动(K[]干草堆){ int j=0; int i=0; 内部温度; 而(j0&&i>haystack.length){ if(针数等于(干草堆[i])){ 返回i; }else if(针干草堆[i]){ i++; } } return-1;//找不到匹配项 } }
问题是,我们需要使它们成为泛型。所以我不能将它们的类型更改为int。如果K实现Comparable,那么您可以这样做:Java &引用;运营商>;对于参数类型K,K";未定义;我不断得到这个,我可以';我修不好 封装apc.dastruc.algorithms; 公共类二进制搜索{ 公共空间泡泡运动(K[]干草堆){ int j=0; int i=0; 内部温度; 而(j0&&i>haystack.length){ if(针数等于(干草堆[i])){ 返回i; }else if(针干草堆[i]){ i++; } } return-1;//找不到匹配项 } },java,algorithm,Java,Algorithm,问题是,我们需要使它们成为泛型。所以我不能将它们的类型更改为int。如果K实现Comparable,那么您可以这样做: package apc.dastruc.algorithms; public class BinarySearch<K>{ public void bubbleSorting(K[] haystack){ int j = 0; int i = 0; int temp; while(
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
}
}
为了做到这一点,您的代码还需要强制K实现Compariable,即:
if(needle.compareTo(haystack[i]) == 0){
return i;
} else if(needle.compareTo(haystack[i]) > 0){
i--;
} else {
i++;
}
公共类二进制搜索
我想您可能需要查看可比较的界面。在这一行中,您尝试使用
运算符比较两个K
类型的对象:
public class BinarySearch<K extends Comparable<K>>
这不起作用,因为您无法将任意对象与
进行比较
解决此问题的一种方法是对类型K
施加约束,指定它必须是实现Comparable
的类型,然后使用Comparable
的方法来比较对象:
if(haystack[i] > haystack[i + 1]){
公共类二进制搜索{
公共空间泡泡运动(K[]干草堆){
// ...
if(haystack[i].compareTo(haystack[i+1])>0){
// ...
}
}
}
public class BinarySearch<K extends Comparable<K>> {
public void bubbleSorting(K[] haystack){
// ...
if (haystack[i].compareTo(haystack[i + 1]) > 0) {
// ...
}
}
}