[英]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);
}
}
如果您只想编译东西,则可以看一下。 有几个问题:
存在多种语法问题,例如缺少分号和过多的括号。
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.