实施 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);
}
}
如果你只想编译,你可以看看这个。有一些问题:
- 尝试分配给 mergeSort 无效,因为它是一个无效方法。
- 目前您的 mergeSort 什么都不做,您可能知道这一点。
- 以上答案正确,您需要使用整数。
存在多个语法问题,例如缺少分号和太多括号。
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);
}
}
因此,当我想调用 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);
}
}
如果你只想编译,你可以看看这个。有一些问题:
- 尝试分配给 mergeSort 无效,因为它是一个无效方法。
- 目前您的 mergeSort 什么都不做,您可能知道这一点。
- 以上答案正确,您需要使用整数。
存在多个语法问题,例如缺少分号和太多括号。
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); } }