方法参数不适用但它们是正确的
Method arguments not applicable but they are correct
编辑:不确定这是否是正确的修复,但出于某种原因添加 extends Comparable 消除了错误
我一直收到同样的错误。为什么?
我收到的错误是:
The method maxHeapify(T[], int) in the type HeapSort is not applicable for the arguments (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);
}
}
}
错误原因是因为这一行定义T的方式不同
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>
对比
<T extends Comparable<T>>
因为 buildMaxHeap 和 heapSort 都调用 maxHeapify,所以你得到一个泛型类型不匹配
如果将所有类型转换为
<T extends Comparable<T>>
然后这将修复该错误
修复此问题时您还会遇到另一个错误
int Largest = (int) array[0];
因为您的数组不包含 int,所以它包含您的通用类型对象
编辑:不确定这是否是正确的修复,但出于某种原因添加 extends Comparable 消除了错误
我一直收到同样的错误。为什么?
我收到的错误是:
The method maxHeapify(T[], int) in the type HeapSort is not applicable for the arguments (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);
}
}
}
错误原因是因为这一行定义T的方式不同
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>
对比
<T extends Comparable<T>>
因为 buildMaxHeap 和 heapSort 都调用 maxHeapify,所以你得到一个泛型类型不匹配
如果将所有类型转换为
<T extends Comparable<T>>
然后这将修复该错误
修复此问题时您还会遇到另一个错误
int Largest = (int) array[0];
因为您的数组不包含 int,所以它包含您的通用类型对象