以前每次写一些小练习代码的时候,不太会利用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]+" ");
}
}