「Java案例」方法重装求不同类型数的立方

87 阅读5分钟

利用方法重装实现不同类型数值的立方计算

立方计算方法的重载实现

编写一个程序,要求编写重载方法xxx cube(xxx value)实现对不同类型数值计算立方。

# 源文件保存为“CubeCalculator.java”
public class CubeCalculator {
    public static void main(String[] args) {
        // 测试不同类型的立方计算
        int intValue = 5;
        float floatValue = 2.5f;
        double doubleValue = 3.7;
        
        System.out.println(intValue + "的立方: " + cube(intValue));
        System.out.println(floatValue + "的立方: " + cube(floatValue));
        System.out.println(doubleValue + "的立方: " + cube(doubleValue));
    }

    // int类型的立方计算
    public static int cube(int value) {
        return value * value * value;
    }

    // float类型的立方计算
    public static float cube(float value) {
        return value * value * value;
    }

    // double类型的立方计算
    public static double cube(double value) {
        return value * value * value;
    }
}

运行结果

5的立方: 125
2.5的立方: 15.625
3.7的立方: 50.653000000000006

代码解析

  • 程序定义了三个同名方法cube,分别处理int、float和double类型参数。
  • 每个方法内部都是简单的三次相乘运算,但返回类型与参数类型一致。
  • Java会根据传入参数的类型自动选择对应的方法版本。
  • 测试部分分别对整型、单精度浮点和双精度浮点数进行了立方计算。

相关案例解析

不同类型数值的平方计算

编写一个程序,要求编写重载方法xxx square(xxx x)实现对不同类型数值的平方计算。

# 源文件保存为“SquareCalculator.java”
public class SquareCalculator {
    public static void main(String[] args) {
        System.out.println("整型平方: " + square(7));
        System.out.println("浮点平方: " + square(4.2f));
        System.out.println("双精度平方: " + square(5.8));
    }

    public static int square(int x) {
        return x * x;
    }

    public static float square(float x) {
        return x * x;
    }

    public static double square(double x) {
        return x * x;
    }
}

运行结果

整型平方: 49
浮点平方: 17.639997
双精度平方: 33.64

代码解析:与立方计算类似,平方计算也需要针对不同类型提供重载方法,避免精度损失。

不同类型数组求和

编写一个程序,要求编写重载方法xxx sum(xxx[] arr)实现不同类型数组求和。

# 源文件保存为“ArraySum.java”
public class ArraySum {
    public static void main(String[] args) {
        int[] intArr = {1, 2, 3};
        float[] floatArr = {1.1f, 2.2f, 3.3f};
        
        System.out.println("整型数组和: " + sum(intArr));
        System.out.println("浮点数组和: " + sum(floatArr));
    }

    public static int sum(int[] arr) {
        int total = 0;
        for (int num : arr) {
            total += num;
        }
        return total;
    }

    public static float sum(float[] arr) {
        float total = 0.0f;
        for (float num : arr) {
            total += num;
        }
        return total;
    }
}

运行结果

整型数组和: 6
浮点数组和: 6.6000004

代码解析:方法重载不仅适用于基本类型参数,也可以用于不同类型的数组处理。

不同类型数值的绝对值计算

编写一个程序,要求编写重载方法xxx abs(xxx x)实现不同类型数值的绝对值计算。

# 源文件保存为“AbsoluteValue.java”
public class AbsoluteValue {
    public static void main(String[] args) {
        System.out.println("整型绝对值: " + abs(-10));
        System.out.println("长整型绝对值: " + abs(-10000000000L));
        System.out.println("浮点绝对值: " + abs(-3.14f));
    }

    public static int abs(int x) {
        return x < 0 ? -x : x;
    }

    public static long abs(long x) {
        return x < 0 ? -x : x;
    }

    public static float abs(float x) {
        return x < 0 ? -x : x;
    }
}

运行结果

整型绝对值: 10
长整型绝对值: 10000000000
浮点绝对值: 3.14

代码解析:绝对值计算逻辑相同,但需要为不同数值类型提供特定实现,确保正确处理各种范围的数值。

操作练习题

重载方法计算圆面积

编写重载方法计算圆面积,分别处理int、float和double类型的半径。 参考代码:

# 源文件保存为“CircleArea.java”
public class CircleArea {
    public static void main(String[] args) {
        System.out.println("整型半径面积: " + area(3));
        System.out.println("浮点半径面积: " + area(2.5f));
        System.out.println("双精度半径面积: " + area(4.2));
    }

    public static double area(int r) {
        return Math.PI * r * r;
    }

    public static float area(float r) {
        return (float)(Math.PI * r * r);
    }

    public static double area(double r) {
        return Math.PI * r * r;
    }
}

运行结果

整型半径面积: 28.274333882308138
浮点半径面积: 19.634954
双精度半径面积: 55.41769440932395

代码解析:注意int和float版本需要进行适当的类型转换,保持计算精度。

重载方法找出三个数中的最大值

编写重载方法找出三个数中的最大值,支持不同类型的数值比较。 参考代码:

# 源文件保存为“MaxOfThree.java”
public class MaxOfThree {
    public static void main(String[] args) {
        System.out.println("整型最大值: " + max(3, 7, 2));
        System.out.println("浮点最大值: " + max(4.1f, 3.9f, 4.2f));
        System.out.println("双精度最大值: " + max(5.8, 6.1, 5.9));
    }

    public static int max(int a, int b, int c) {
        return Math.max(Math.max(a, b), c);
    }

    public static float max(float a, float b, float c) {
        return Math.max(Math.max(a, b), c);
    }

    public static double max(double a, double b, double c) {
        return Math.max(Math.max(a, b), c);
    }
}

运行结果

整型最大值: 7
浮点最大值: 4.2
双精度最大值: 6.1

代码解析:使用Math.max方法简化比较逻辑,保持各类型版本实现一致。

重载方法转换温度单位

编写重载方法实现摄氏度转华氏度,支持不同类型的温度值转换。 参考代码:

# 源文件保存为“TemperatureConverter.java”
public class TemperatureConverter {
    public static void main(String[] args) {
        System.out.println("整型温度转换: " + celsiusToFahrenheit(25));
        System.out.println("浮点温度转换: " + celsiusToFahrenheit(23.5f));
        System.out.println("双精度温度转换: " + celsiusToFahrenheit(22.8));
    }

    public static double celsiusToFahrenheit(int celsius) {
        return celsius * 9.0 / 5 + 32;
    }

    public static float celsiusToFahrenheit(float celsius) {
        return celsius * 9f / 5 + 32;
    }

    public static double celsiusToFahrenheit(double celsius) {
        return celsius * 9.0 / 5 + 32;
    }
}

运行结果

整型温度转换: 77.0
浮点温度转换: 74.3
双精度温度转换: 73.04

代码解析:温度转换公式相同,但需要注意各版本中的数值字面量类型匹配参数类型。

方法重载是Java多态性的重要体现,允许使用相同的方法名处理不同类型的数据,使代码更加整洁易读。在实际开发中,合理使用方法重载可以大大提高代码的可维护性和扩展性。