实现Java Comparator的问题 - 泛型

时间:2016-05-29 14:35:40

标签: java generics initialization implementation comparator

所以,当我想调用Comparator引起的mergeSort()方法时,我的Main类出现了问题。我收到以下消息:

Image of the error message

我不知道如何解决这个问题..请帮帮我!

注意: 不要怀疑代码中没有任何内容。由于上述问题我无法证明我的代码的功能,因此卡住了(

(我的英语不好意思)

class Algorithms
{
    public static <T> void mergeSort(final T[] a, final Comparator<T> c)
    {
        T[] list = a;
        Comparator<T> comp = c;
    }
}


public class Main
{
    public static void main(String[] args)
    {
        int[] unsortedList = {4,5,7,1,98,32}; //Expected = 1,4,5,7,32,98

        Comparator<Integer> sorted = Comparator.naturalOrder();
        int[] sortedList = Algorithms.mergeSort(unsortedList,sorted))
    }
}

4 个答案:

答案 0 :(得分:3)

在此代码中,Algorithms.mergeSort调用中的类型不匹配:

int[] unsortedList = {4,5,7,1,98,32}; //Expected = 1,4,5,7,32,98

Comparator<Integer> sorted = Comparator.naturalOrder();
Algorithms.mergeSort(unsortedList, sorted))

unsortedList的类型为int[]sorted的类型为Comparator<Integer>。要使类型匹配,您需要使用Integer[]作为unsortedList的类型:

Integer[] unsortedList = {4, 5, 7, 1, 98, 32}; //Expected = 1,4,5,7,32,98

另一个问题是Algorithms.mergeSort返回void,所以这仍然无法编译:

int[] sortedList = Algorithms.mergeSort(unsortedList, sorted);

您需要删除作业:

Algorithms.mergeSort(unsortedList, sorted);

将它放在一起,这将有效(在您实施Algorithms.mergeSort之后):

public static void main(String[] args) {
    Integer[] unsortedList = {4, 5, 7, 1, 98, 32};

    Comparator<Integer> sorted = Comparator.naturalOrder();
    Algorithms.mergeSort(unsortedList, sorted);
}

答案 1 :(得分:2)

使用Integer[]代替int[]

答案 2 :(得分:0)

另一种可能性是在克隆上工作:

class Algorithm
{
    public static <T> T[] mergeSort(final T[] a, final Comparator<T> c)
    {
        T[] list = a.clone();
        Comparator<T> comp = c;
        Arrays.sort(list, comp);
        return list;
    }

    public static void main(String[] args)
    {
        Integer[] unsortedList = {4,5,7,1,98,32}; //Expected = 1,4,5,7,32,98

        Comparator<Integer> sorted = Comparator.naturalOrder();
        Integer[] sortedList = Algorithm.mergeSort(unsortedList,sorted);
    }
}

答案 3 :(得分:0)

如果你只是想要编译的东西,你可以看一下。有一些问题:

  1. 尝试分配给mergeSort并不起作用,因为它是一种无效方法。
  2. 目前你的mergeSort什么都不做,你可能知道。
  3. 上述答案是正确的,您需要使用整数。
  4. 有多种语法问题,例如缺少分号和太多的parens。

    import java.util.Comparator;
    
    class Algorithms
    {
        public static <T> void mergeSort(final T[] a, final Comparator<T> c)
        {
            T[] list = a;
            Comparator<T> comp = c;
        }
    }
    
    
    public class Main
    {
    
    public static void main(String[] args)
    {
        Integer[] unsortedList = {4,5,7,1,98,32}; //Expected = 1,4,5,7,32,98
    
        Comparator<Integer> sorted = Comparator.naturalOrder();
        Algorithms.mergeSort(unsortedList,sorted);
    }
    }