如何在Java中正确调用方法
我有以下关于合并排序算法的代码。我已经有一段时间没有使用Java了,我完全忘记了如何正确地调用MergeSort方法,以便它对指定的数组进行排序。当前,如何在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
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(p while(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};