如何在Java中正确调用方法

如何在Java中正确调用方法,java,merge,Java,Merge,我有以下关于合并排序算法的代码。我已经有一段时间没有使用Java了,我完全忘记了如何正确地调用MergeSort方法,以便它对指定的数组进行排序。当前,MergeSort(A)正在抛出一个错误(因为MergeSort方法是泛型的?)。它告诉我应该将我的MergeSort签名改为MergeSort(int[]A)。任何帮助都将不胜感激 public static void main(String[] args){ int[] A = {4,7,9,2,3,3,0,1}; Syste

我有以下关于合并排序算法的代码。我已经有一段时间没有使用Java了,我完全忘记了如何正确地调用MergeSort方法,以便它对指定的数组进行排序。当前,
MergeSort(A)
正在抛出一个错误(因为MergeSort方法是泛型的?)。它告诉我应该将我的MergeSort签名改为
MergeSort(int[]A)
。任何帮助都将不胜感激

public static void main(String[] args){
    int[] A = {4,7,9,2,3,3,0,1};
    System.out.println(Arrays.toString(A));

    MergeSort(A);
}


public static <T extends Comparable<T>> void MergeSort(T[] A){
    MergeSort(A, 0, A.length - 1);
}

private static <T extends Comparable<T>> void MergeSort(T[] A, int p, int r){
    if(p < r){
        int q =  (p + r)/2;
        MergeSort(A,p,q);
        MergeSort(A,q + 1, r);
        merge(A,p,q,r);
    }
}

private static <T extends Comparable<T>> void merge(T[] A, int p, int q, int r){
    T[] temp = (T[])(new Comparable[A.length]);

    int first1 = p, last1 = q;
    int first2 = q + 1, last2 = r;
    int index = first1;

    while(first1 <= last1 && first2 <= last2){
        if(A[first1].compareTo(A[first2]) < 0){
            temp[index] = A[first1];
            first1++;
        } else {
            temp[index] = A[first2];
            first2++;
        }
        index++;
    }

    while(first1 <= last1){
        temp[index] = A[first1];
        first1++; index++;
    }
    while(first2 <= last2){
        temp[index] = A[first2];
        first2++; index++;
    }

    for(index = p; index <= r; index++){
        A[index] = temp[index];
    }
}
publicstaticvoidmain(字符串[]args){
int[]A={4,7,9,2,3,3,0,1};
System.out.println(Arrays.toString(A));
合并(A);
}
公共静态无效合并排序(T[]A){
合并排序(A,0,A.length-1);
}
私有静态void合并排序(T[]A,int p,int r){
if(pwhile(first1此错误是因为
int
是一个基元,基元数组不能用作泛型数组

您可以使用相应的包装器类型
Integer

Integer[] A = {4,7,9,2,3,3,0,1};
它会很好地工作。

您的方法是:

public static <T extends Comparable<T>> void MergeSort(T[] A)
我还想指出,除非这是一个学术练习,否则Java API中的实用程序类有许多不同的
sort()
方法正是出于这个原因,包括

现在开始命名。

在Java中,对于变量使用
camelCase
,对于类使用
PascalCase
,对于编译时常量使用
BLOCK_CAPS
,这是一种被广泛接受且受到强烈鼓励的惯例。请更改代码以使其符合要求,因为不这样做会使阅读变得非常困难。此外,这会弄乱此处的自动语法高亮显示。

正如所述:

Every type variable declared as a type parameter has a bound. 
If no bound is declared for a type variable, Object is assumed. 
由于您传递了一个基元类型,因此它将生成编译时错误,即方法
MergeSort
需要的是
类型变量
而不是
基元类型

解决方案:

您可以使用integer原语的包装类,它是
integer

Integer[] A = {4,7,9,2,3,3,0,1};

int
不是
类型
。它是基元类型。这就是为什么
数组
类静态方法对每个基元类型数组都有备选方法的原因。请确保在问题中包含准确的错误消息。(另外,记住先搜索它。)
Integer[] A = {4,7,9,2,3,3,0,1};