"运营商>未定义参数类型K,K"我不断得到这个,我无法解决它

时间:2015-02-13 09:25:59

标签: java algorithm

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。

2 个答案:

答案 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) {
            // ...
        }
    }
}