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 &引用;运营商>;对于参数类型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(

问题是,我们需要使它们成为泛型。所以我不能将它们的类型更改为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(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) {
            // ...
        }
    }
}