错误:类型Selection中的方法sort(Comparable [])不适用于参数(int [])

时间:2014-07-16 00:44:22

标签: java algorithm compiler-errors

这是我在尝试写出Selection排序时遇到的错误。有人能指出我做错了什么。我的代码如下。谢谢!

    public class Selection
    {
        static void sort(Comparable[] a)
    {
    int N = a.length;
    for (int i = 0; i < N; i++)
    {
    int min = i;
     for (int j = i+1; j < N; j++)
     if (less(a[j], a[min]))
     min = j;
     exch(a, i, min);
     }
     }
     private static boolean less(Comparable v, Comparable w)
     { 
     return v.compareTo(w) < 0;   
     }
    private static void exch(Comparable[] a, int i, int j)
    { 
     Comparable temp = a[i];
     a[i] = a[j];
     a[j] = temp;
 }

public static void main(String args[])
{

    int[] ys = {3,4,5,5,22,4,66,4444,33,3,656,544,4};
    Selection.sort(ys);
}


}

4 个答案:

答案 0 :(得分:5)

int是基本类型,因此无法实现任何接口。这就是为什么无法将int []传递给期望Comparable []。

的方法

您可以通过将ys更改为Integer数组(即Integer [])来克服此错误,因为Integer实现了Comparable。

答案 1 :(得分:2)

int是原始数据类型。它不是一个类,它没有实现Comparable

您应该使用Integer代替Comparable

答案 2 :(得分:0)

可比较适用于对象,如您所知,int不是对象。 int[]解析为singular object而不是对象数组。

如果您将ys定义为Integer[],那么您将获得预期的对象数组。

答案 3 :(得分:0)

如前面提到的那样,您不能对int应用Comparable,但如果您仍想使用基元并使用Integer代替Comparable实现Comparable,编译器将隐式地将int转换为Integer

static void sort(int[] a)
{
    int N = a.length;
    for (int i = 0; i < N; i++)
    {
        int min = i;

        for (int j = i+1; j < N; j++)
            if (less(a[j], a[min]))
                min = j;

        exch(a, i, min);
    }
}

private static boolean less(Integer v, Integer w)
{
    return v.compareTo(w) < 0;
}

private static void exch(int[] a, int i, int j)
{
    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}