2015-03-19 112 views
-1

我有这个代码的问题。当我调用方法sort并将一个数组作为参数传递给它(sort(array))时,它给我一个错误。有人能说出什么是错的吗?由于将数组传递给JAVA中的方法

public class MergeSort { 

public static <T extends Comparable<T>> void sort (T[] a) { 
    if (a.length <= 1) 
     return; 

    int hSize = a.length/2; 

    T[] lTab = (T[])new Comparable[hSize]; 
    T[] rTab = (T[])new Comparable[a.length-hSize]; 

    System.arraycopy(a, 0, lTab, 0, hSize); 
    System.arraycopy(a, hSize, rTab, 0,a.length-hSize); 

    sort(lTab); 
    sort(rTab); 
    merge(a, lTab, rTab); 
} 

private static <T extends Comparable<T>> void merge (T[] a, T[] l, T[] r) { 
    int i = 0; // indexes l 
    int j = 0; // indexes r 
    int k = 0; // indexes a 

    while (i < l.length && j < r.length) 
     if (l[i].compareTo(r[j]) < 0) 
      a[k++] = l[i++]; 
     else 
      a[k++] = r[j++]; 

    while (i < l.length) 
     a[k++] = l[i++]; 

    while (j < r.length) 
     a[k++] = r[j++]; 
    } 

} 

的错误是:

method sort in class MergeSort cannot be applied to given types Required T[] Found int[]

+2

显示哪个错误? – Zorian 2015-03-19 13:13:51

+0

错误信息是什么? – OPK 2015-03-19 13:15:43

+0

404 - 错误未找到 – gtgaxiola 2015-03-19 13:15:55

回答

3

你必须确保type确实提供implements Comparable

看来你是路过int[]而不是Integer[]

你会不能使用原始类型。对于这些情况,您将不得不使用其本身实现Comparable的Wrappers

如果您使用自己的type(即您自己的对象),那么类型must将实现Comparable。

+1

!如果你用一个原始int数组调用你的方法,你实际上会得到一个编译错误。 – PLivesey 2015-03-19 13:31:31

+0

代替公共类MergeSort,我编写了公共类MergeSort扩展了Comparable,但它给了我另一个错误(“此处没有预期的接口”) – user2950895 2015-03-19 13:35:56

+1

您不能扩展方法声明。你传递的'类型'是需要扩展Comparable的。例如,如果你传递一个String [],它将会工作,因为'String'固有地扩展了Comparable ...如果你正在传递一个基本类型,那么你必须使用Wrapper对象(而不是'int []'使用'Integer []'这也延伸了Comparable) – gtgaxiola 2015-03-19 13:37:07