繁体   English   中英

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

[英]Problems with implementing Java Comparator - Generics

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

错误消息的图像

我不知道如何解决该问题。请帮助我!

注意:不要奇怪代码中什么也没有发生。 由于上述问题,我无法证明代码的功能而陷入困境:

(为我的英语不好对不起)

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返回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. 上面的答案是正确的,您需要使用Integers。
  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); } } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM