无法弄清楚我打算传递给这种排序方法的论证类型

时间:2015-02-25 05:39:13

标签: java arrays sorting

所以我试图让我的程序使用教科书给我们的方法对数组进行排序,但我无法弄清楚参数需要什么。

这是给我们的代码:

 public static <T extends Comparable<T>> void sort(T[] a) {
    final int N = a.length;
    for (int i = 0; i < N; i++) {
        for (int j = i; j > 0 && less(a[j], a[j-1]); j--) {
            exch(a, j, j-1);
        }
        assert isSorted(a, 0, i);
    }
    assert isSorted(a);
}

这是我的计划:

public static void main(String[] args){
    double power = 0;
    int i;
    Random rand = new Random();
    for (i=8;i<=18;i++){
        power = Math.pow(2, i);
        double[] doubleArray = new double[(int) power];
        for(int j = 0;j<doubleArray.length;j++) doubleArray[j] = rand.nextInt();
        Insertion.sort(doubleArray);
    }
}

这里我正在尝试创建一个主循环,它遍历从28到218的2的幂的长度。在循环中,我随机生成该长度的整数数组并在该数组上调用排序。( sort方法在Insertion类中,这就是为什么它说Insertion.sort)

据我所知,排序方法是针对数组的,但是它编写Eclipse的方式给我一个错误,说“插入类型中的方法排序(T [])不适用于参数(double []) ”

4 个答案:

答案 0 :(得分:1)

基元(double)不能与泛型一起使用,它期望某种类型的Objectdouble也不是Comparable(它没有实现所需的interface ...因为它是原始的。)

您可以改为使用Double,例如......

    for (i = 8; i <= 18; i++) {
        power = Math.pow(2, i);
        Double[] doubleArray = new Double[(int) power];
        for (int j = 0; j < doubleArray.length; j++) {
            doubleArray[j] = (double)rand.nextInt();
        }
        sort(doubleArray);
    }

因为它既是Object又是Comparable

答案 1 :(得分:0)

<T extends Comparable<T>>只是意味着T必须至少属于可比较类型。但是,Comparable也是Generic,因此您还必须指定Comparable的类型,即T类型。

基本类型的集合类和包装类满足这个条件,因此您可以使用它们中的任何一个。

答案 2 :(得分:0)

您需要传递一个数组对象,其中对象属于同一类型,并为自己实现Comparable接口。

原始double不实现Comparable。但Double确实如此。 Double implements Comparable<Double>

答案 3 :(得分:0)

您不能使用基本类型数组作为sort(T[])的参数,因为基元不实现Comparable。对DoubleInteger等基元使用包装类型。

public static void main(String[] args){
  double power = 0;
  int i;
  Random rand = new Random();
  for (i=8;i<=18;i++){
    power = Math.pow(2, i);
    Integer[] integerArray = new Integer[(int) power];
    for(int j = 0;j<integerArray.length;j++) integerArray[j] = rand.nextInt();
    Insertion.sort(integerArray);
  }
}