Java 方法参数不适用,但它们是正确的
编辑:不确定这是否是一个正确的修复,但由于某些原因,添加扩展可比性可以消除错误 我总是犯同样的错误。为什么? 我收到的错误是: 类型HeapSort中的方法maxHeapifyT[],int不适用于参数T[],int 这是我的密码:Java 方法参数不适用,但它们是正确的,java,generics,methods,arguments,Java,Generics,Methods,Arguments,编辑:不确定这是否是一个正确的修复,但由于某些原因,添加扩展可比性可以消除错误 我总是犯同样的错误。为什么? 我收到的错误是: 类型HeapSort中的方法maxHeapifyT[],int不适用于参数T[],int 这是我的密码: public class HeapSort { private static int parent(int i) { if(i % 2 == 0) { return((i-1)/2);
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)
因为你的数组不包含int,它包含你的泛型类型对象我真的明白了,当我把我的编辑放到你的回复中时,你的回复出现了lol。但是谢谢。但是,在修复之后,我没有得到你所说的int转换错误,我知道它们不是int,但是在没有转换的情况下它有一个错误,所以我现在就把它放在那里。当我将最大的变量更改为T时,会出现错误,因为L和R是整数,我无法将它们与泛型类型进行比较。我不确定为什么将其设置为最大=数组[0],它只需要是索引,而不是实际对象。所有错误都已修复!
private static <T> void buildMaxHeap(T[] array)
public static <T> void heapSort(T[] array)
<T>
<T extends Comparable<T>>
<T extends Comparable<T>>
int Largest = (int) array[0];