【发布时间】:2015-11-08 22:25:11
【问题描述】:
大家好,我一直在 Eclipse 中使用 java 开发合并排序器应用程序。由于某种原因,我无法弄清楚,这让我很生气......
这是我正在使用的主文件
public class MergeSorter {
public Integer[] sort(Integer[] array) {
return mergesort(array);
}
private Integer[] mergesort(Integer[] array) {
if(array.length > 1) {
Integer[] left = new Integer[array.length /2];
Integer[] right = new Integer[array.length - left.length];
mergesort(left);
mergesort(right);
merge(left, right);
}
return array;
}
public Integer[] merge(Integer[] left, Integer[] right) {
int leftI = 0;
int rightI = 0;
int newI = 0;
Integer[] newArr = new Integer[left.length + right.length];
while (leftI < left.length && rightI < right.length) {
if (left[leftI] < right[rightI]) {
newArr[newI] = left[leftI];
leftI++;
} else {
newArr[newI] = right[rightI];
rightI++;
}
newI++;
}
// Either the left or the right may still have elements
for (int i = leftI; i < left.length; i++) { // left
newArr[newI] = left[i];
newI++;
}
for (int i = rightI; i < right.length; i++) { // right
newArr[newI] = right[i];
newI++;
}
return newArr;
}
public void printCollection(Integer[] items) {
for (int i = 0; i < items.length; i++) {
System.out.print(items[i] + " ");
}
System.out.println();
}
}
还有一个驱动程序文件已经完成了运行此代码的所有工作。有人告诉我,我需要将合并排序器类泛型为使用 arrayLists 而不是数组,但我不知道该怎么做。我在想这是我需要使用 List 的地方吗?但不确定,感谢任何帮助
【问题讨论】:
-
您使用盒装
Integer类型而不是原始int是否有原因? -
它会给你什么错误?
-
识别问题(例如:您可以在集成之前测试
private方法 - 因为在您调用mergesort时,left和right中没有任何内容)并提供输入,您的实际输出和预期输出。 -
在比较中尝试使用
valueOf(),即尝试将left[leftI] < right[rightI]更改为left[leftI].valueOf() < right[rightI].valueOf() -
是时候学习如何调试了。