Java的重载

本文分享了作者在编写Java代码时,通过使用方法重载特性提高代码可读性和维护性的经验。特别介绍了如何利用重载来清晰地实现Huffman树的构建,通过实例展示了重载方法在处理复杂问题时的优越性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

以前每次写一些小练习代码的时候,不太会利用Java的诸多特性。

经常在做一些小练习的时候,代码基本上总是会写在同一个方法中。代码量少的时候还好,代码多了,参数多了之后,经常会眼花撩话,甚至思路混乱。

现在发现,利用Java的重载特性写一些能用到的工具方法。对整体的思路真的是有极大的帮助,思路也会很清晰,再也不怕参数太多了。

以下是重载的应用实例(Huffuman树问题)

//    Huffman树在编码中有着广泛的应用。在这里,我们只关心Huffman树的构造过程。
//              给出一列数{pi}={p0, p1, …, pn-1},用这列数构造Huffman树的过程如下:
//              1. 找到{pi}中最小的两个数,设为pa和pb,将pa和pb从{pi}中删除掉,
//                  然后将它们的和加入到{pi}中。这个过程的费用记为pa +pb。
//              2. 重复步骤1,直到{pi}中只剩下一个数。
//              在上面的操作过程中,把所有的费用相加,就得到了构造Huffman树的总费用。
//              本题任务:对于给定的一个数列,现在请你求出用该数列构造Huffman树的总费用。

    public static void Huffuman(){   //Huffuman树
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int[] arr = entering(n);
//        arrayPrint(arr,0);
//        System.out.println();
//
//        intArraySorting(arr); //数组排序
//        arr[1] += arr[0];
//        arrayPrint(arr,1);
        int m = 1;
        int m1 = 0;
        int sum = 0;
        while(n > 1){
            intArraySorting(arr); //数组排序
            arr[m] += arr[m1];  //将最小的两个加起来
            sum += arr[m];  //计算费用
            n--;
            m++;
            m1++;
        }
        System.out.println(sum);

    }
public static int[] entering(int n){ //给一维数组赋值
        int[] arr = new int[n];
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            arr[i] = scanner.nextInt();
        }
        return arr;
    }

    public static int[][] entering2(int n){ //给二维数组赋值
        int[][] arr = new int[n][n];
        Scanner scanner = new Scanner(System.in);
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                arr[i][j] = scanner.nextInt();
            }
        }
        return arr;
    }

    public static int[] intArraySorting(int[] arr){ //数组排序
        for (int i = 0; i < arr.length; i++) {
            for (int j = i+1; j < arr.length; j++) {
                if(arr[i] > arr[j]){
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr;
    }

    public static void arrayPrint(int[] arr, int num){ //数组输出
        for (int i = num; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }

    public static void arrayPrint(int[][] arr){
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j]+" ");
            }
            System.out.println();
        }
    }

    public static void arrayPrint(char[] arr, int num){
        for (int i = num; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }

    public static void arrayPrint(long[] arr, int num){
        for (int i = num; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }

    public static void arrayPrint(String[] arr, int num){
        for (int i = num; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }

    public static void arrayPrint(double[] arr, int num){
        for (int i = num; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值