public static void main(String[] args) {
// TODO Auto-generated method stub int []a ={3,4,5,32,6,345,432,8};
mergeSort(a);

}
public static <AnyType extends Comparable<? super AnyType>> void mergeSort(AnyType []a){
AnyType [] tmpArray=(AnyType[])new Comparable[a.length];
mergeSort(a,tmpArray,0,a.length-1);
}谁能说说这里用的泛型怎么这么麻烦,为什么不用简单的T 定义呢  还有,已经用了泛型了,可是 调用mergeSort()是还是报错,就是
mergeSort(a);
这句,IDE报错说mergeSort()
The method mergeSort(AnyType[]) in the type MergeSort is not applicable for the arguments (int[])
麻烦知道的指点一下

解决方案 »

  1.   

    你要 按什么排序啊,你的代码 我看的 想打人啊    int []a ={3,4,5,32,6,345,432,8};
            Arrays.sort(a);
            System.out.println(Arrays.toString(a));
      

  2.   

    全部代码如下  这个好像是归并排序算法package mythink;public class MergeSort { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub int []a ={3,4,5,32,6,345,432,8};
    mergeSort(a);

    }
    public static <AnyType extends Comparable<? super AnyType>> void mergeSort(AnyType []a){
    AnyType [] tmpArray=(AnyType[])new Comparable[a.length];
    mergeSort(a,tmpArray,0,a.length-1);
    } private static <AnyType extends Comparable<? super AnyType>> void mergeSort(AnyType [] a,AnyType [] tmpArray,int left,int right){
    if(left<right){
    int center=(left+right)/2;
    mergeSort(a,tmpArray,left,center);
    mergeSort(a,tmpArray,center+1,right);
    merge(a,tmpArray,left,center+1,right);
    }
    }
    private static <AnyType extends Comparable<? super AnyType>> void merge( AnyType [] a,AnyType [] tmpArray,int leftPos,int rightPos,int rightEnd){
    int leftEnd =rightPos;
    int tmpPos=leftPos;
    int numElements =rightEnd=leftPos+1;

    while(leftPos<=leftEnd && rightPos <=rightEnd){
    if(a[leftPos].compareTo(a[rightPos])<=0)
    tmpArray[tmpPos++]=a[leftPos++];
    else tmpArray[tmpPos++]=a[rightPos++];
    }
    while(leftPos <= leftEnd) tmpArray[tmpPos++] =a[leftPos++];
    while(rightPos<=rightEnd) tmpArray[tmpPos++] =a[rightPos++];
    for(int i=0;i<numElements;i++,rightEnd --){
    a[rightEnd]=tmpArray[rightEnd];
    }
    }
    }
      

  3.   

    里面泛型的用法感觉很怪异 谁帮解释一下  还有就是主函数调用mergeSort(a);时,
    会报这个错误The method mergeSort(AnyType[]) in the type MergeSort is not applicable for the arguments (int[])
      

  4.   

    算法中的代码错误(不知道是不是楼主拷贝的时候出错的)
    merge()中
    //int leftEnd =rightPos;
    int leftEnd =rightPos - 1;
    int tmpPos = leftPos;
    //int numElements =rightEnd=leftPos+1;
    int numElements =rightEnd - leftPos+1;范型方法在调用的时候要使用包装的Integer[]数组,而不能使用基本类型int[],因为范型不识别基本类型,而编译器只可以从int到Integer自动包装,而不能把int[]自动包装为Integer[],所以使用int[]会产生编译错误,改为
    Integer []a ={3,4,5,32,6,345,432,8};
    后就不会产生编译错误。
    至于范型的用法很怪异,是因为java中的范型中存在  擦除,类型的信息在运行时会丢失,所以必须用边界来在编译期确保传入的参数是符合一定的规则的。擦除是java范型中必须理解的概念,内容比较多,一下说不清,如果想搞清楚,还是找本书好好看看或者在网上搜一下。我正看的  Thinking in java 中就讲的比较详细。
      

  5.   

    int 又不是 Comparable<? super AnyType> 的子类, 当然报错了。
      

  6.   

    <AnyType extends Comparable<? super AnyType>>
    谁能解释一下这个呢  不太懂啊