You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:33:47