所以我试图让我的程序使用教科书给我们的方法对数组进行排序,但我无法弄清楚参数需要什么。
这是给我们的代码:
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 []) ”
答案 0 :(得分:1)
基元(double
)不能与泛型一起使用,它期望某种类型的Object
。 double
也不是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
。对Double
,Integer
等基元使用包装类型。
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);
}
}