我的任务是在java中编写归并排序,任务还指定我不能使用整数,我必须使用可比整数。这是我第一次使用java。我的问题是比较合并函数内的两个compint数组中的元素。我试过if (list[i].compareTo(list2[j])
,但compareTo只能取整数。如有任何帮助,不胜感激
public static Comparable<Integer>[] merge(Comparable<Integer> list[], Comparable<Integer> list2[] ) {
Comparable<Integer> C[];
int i = 0; int j = 0; int k = 0;
while (i < list.length && j < list2.length) {
if (list[i] < list2[j]]) {
C[k] = list[i];
i++; k++;
} else {
C[k] = list2[j];
j++; k++;
}
}
while (i < list.length) {
C[k++] = list[i++];
}
while (j < list2.length) {
C[k++] = list2[j++];
}
return C;
}
只要Integer
就是你想要的。它是Comparable<Integer>
(尝试一下:Comparable<Integer> i = Integer.valueOf(10);
工作得很好!)-Comparable<Integer>
可以比较2个整数实例。它不能比较2个Comparable<Integer>
实例。
在你的代码中,每一个你写Comparable<Integer>
的地方都应该是Integer
。
你应该这样做。
public static Integer [] merge(Integer[] list, Integer[]list2 ) {
Integer[] C = new Integer[list.length + list2.length];
int i = 0; int j = 0; int k = 0;
while (i < list.length && j < list2.length) {
if (list[i].compareTo(list2[j]) < 0) {
C[k] = list[i];
i++; k++;
} else {
C[k] = list2[j];
j++; k++;
}
}
while (i < list.length) {
C[k++] = list[i++];
}
while (j < list2.length) {
C[k++] = list2[j++];
}
return C;
}
应该使用Comparable<Integer>
来测试数组元素(与常见的<, == , and >
操作符相反)。由于Integer
类实现了Comparable<T>
接口,您可以通过执行以下操作来完成任务:
list[i].compareTo(list2[j] < 0)
而非list[i] < list2[j]
其他都说不通。特别是传递两个已经指出的Comparable<Integer>
数组。如果这不是你的理解,那么你应该和你的老师讨论。