方法参数不适用但它们是正确的

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,所以它包含您的通用类型对象