编辑:不确定这是否是正确的修复但由于某种原因添加扩展Comparable可以摆脱错误
我一直得到同样的错误。为什么呢?
我收到的错误是:
HeapSort类型中的方法maxHeapify(T [],int)不适用于参数(T [],int)
这是我的代码:
public class HeapSort {
private static int parent(int i)
{
if(i % 2 == 0)
{
return((i-1)/2);
}
else
{
return(i/2);
}
}
private static int leftChild(int i)
{
return(2*i + 1);
}
private static int rightChild(int i)
{
return(2*i + 2);
}
private static <T> void buildMaxHeap(T[] array)
{
int heapSize = array.length;
for(int i = (heapSize/2 - 1); i >= 0; i--)
{
maxHeapify(array, i);
}
}
private static <T extends Comparable<T>> void maxHeapify(T[] array, int i)
{
int L = leftChild(i);
int R = rightChild(i);
int Largest = (int) array[0];
T temp;
if(L <= array.length && array[R].compareTo(array[i]) > 0)
{
Largest = L;
}
else
{
Largest = i;
}
if(R <= array.length && array[R].compareTo(array[Largest]) > 0)
{
Largest = R;
}
if(Largest != i)
{
Swap(array[i], array[Largest]);
maxHeapify(array, Largest);
}
}
public static <T> void heapSort(T[] array)
{
buildMaxHeap(array);
int heapSize = array.length;
for(int i = array.length - 1; i >= 0; i--)
{
Swap(array[0], array[i]);
heapSize = heapSize-1;
maxHeapify(array, 0);
}
}
}
答案 0 :(得分:0)
错误的原因是因为此行以不同方式定义了
private static <T extends Comparable<T>> void maxHeapify(T[] array, int i)
到这个
private static <T> void buildMaxHeap(T[] array)
和这个
public static <T> void heapSort(T[] array)
它的
<T>
vs
<T extends Comparable<T>>
因为buildMaxHeap和heapSort都调用maxHeapify,所以你得到泛型类型不匹配
如果您将所有类型转换为
<T extends Comparable<T>>
然后这将解决该错误
修复此错误时,您还会遇到其他错误
int Largest = (int) array[0];
因为你的数组不包含int,它包含你的泛型类型对象