实施 Java 比较器的问题 - 泛型

Problems with implementing Java Comparator - Generics

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

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

注意事项: 不要奇怪代码中没有发生任何事情。我被卡住了,因为由于上述问题我无法证明我的代码的功能:(

(抱歉我的英语不好)

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

在此代码中,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 returns 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);
}

使用 Integer[] 而不是 int[]

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

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

如果你只想编译,你可以看看这个。有一些问题:

  1. 尝试分配给 mergeSort 无效,因为它是一个无效方法。
  2. 目前您的 mergeSort 什么都不做,您可能知道这一点。
  3. 以上答案正确,您需要使用整数。
  4. 存在多个语法问题,例如缺少分号和太多括号。

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