Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 方法参数不适用,但它们是正确的_Java_Generics_Methods_Arguments - Fatal编程技术网

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

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);

编辑:不确定这是否是一个正确的修复,但由于某些原因,添加扩展可比性可以消除错误

我总是犯同样的错误。为什么?

我收到的错误是:

类型HeapSort中的方法maxHeapifyT[],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);
        }
    }
}

该错误的原因是因为此行对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];