Java驱动程序调用MergeSort类报错,求问题排查与修正
解决你的MergeSort驱动程序问题
我来帮你梳理下代码里的问题,一步步解决:
你的驱动程序里的错误点:
- 变量未声明类型:
size=50;这行没有指定size的类型,Java是强类型语言,必须写成int size = 50; - 错误实例化类:
int[] data= MergeSort(size);这行完全错了——MergeSort是一个类,不是返回数组的方法,你需要用new关键字创建它的实例:MergeSort sorter = new MergeSort(size); - 未触发排序逻辑:创建完
MergeSort实例后,你需要调用它的sort()方法来执行归并排序 - 无法获取内部数组:你的
MergeSort类里的data是私有变量,外部无法直接访问,需要添加一个公共的getter方法来获取排序后的数组 - 错误打印数组:直接
System.out.println(data);只会输出数组的内存引用,要用Arrays.toString(data)才能打印数组的实际内容
修改后的MergeSort类(添加getter方法)
你只需要在MergeSort类里加一个获取data的方法:
import java.util.Random; public class MergeSort { private int[] data; private static final Random generator = new Random(); public MergeSort(int size) { data = new int[size]; for (int i = 0; i < size; i++) data[i] = 10 + generator.nextInt(90); } // call this method from main program public void sort() { sortArray(0, data.length - 1); } private void sortArray(int low, int high) { if ((high - low) >= 1) { int middle1 = (low + high) / 2; int middle2 = middle1 + 1; sortArray(low, middle1); sortArray(middle2, high); merge(low, middle1, middle2, high); } } private void merge(int left, int middle1, int middle2, int right) { int leftIndex = left; int rightIndex = middle2; int combinedIndex = left; int[] combined = new int[data.length]; while (leftIndex <= middle1 && rightIndex <= right) { if (data[leftIndex] <= data[rightIndex]) combined[combinedIndex++] = data[leftIndex++]; else combined[combinedIndex++] = data[rightIndex++]; } if (leftIndex == middle2) while (rightIndex <= right) combined[combinedIndex++] = data[rightIndex++]; else while (leftIndex <= middle1) combined[combinedIndex++] = data[leftIndex++]; for (int i = left; i <= right; i++) data[i] = combined[i]; } // 添加这个getter方法,让外部能获取排序后的数组 public int[] getData() { return data; } }
修正后的驱动程序Sorting类
import java.util.Arrays; public class Sorting { public static void main(String args[]) { // 1. 声明并初始化size变量 int size = 50; // 2. 创建MergeSort实例 MergeSort sorter = new MergeSort(size); // 3. 打印排序前的数组(可选,用来对比) System.out.println("排序前的数组:"); System.out.println(Arrays.toString(sorter.getData())); // 4. 调用sort方法执行排序 sorter.sort(); // 5. 打印排序后的数组 System.out.println("\n排序后的数组:"); System.out.println(Arrays.toString(sorter.getData())); } }
这样修改后,你的代码就能正常运行了——先创建归并排序的实例,触发排序,然后获取并打印排序前后的数组内容。
内容的提问来源于stack exchange,提问作者A.Drago
相关产品推荐
相关产品推荐

