「Java案例」华氏摄氏温度转换

229 阅读6分钟

不管是看天气预报还是做科学实验,经常需要在华氏度和摄氏度之间转换。今天来实现这个的温度转换程序。

案例解析

温度双向转换

编写程序,实现华氏度和摄氏度互相转换的实现。

# 源文件保存为“TemperatureConverter.java”。
import java.util.Scanner;

public class TemperatureConverter {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("请选择转换方向:");
        System.out.println("1. 摄氏度 → 华氏度");
        System.out.println("2. 华氏度 → 摄氏度");
        System.out.print("请输入选项:");
        int choice = scanner.nextInt();
        
        System.out.print("请输入温度值:");
        double temperature = scanner.nextDouble();
        
        double result;
        if (choice == 1) {
            // 摄氏度转华氏度公式:F = C × 9/5 + 32
            result = temperature * 9 / 5 + 32;
            System.out.printf("%.1f 摄氏度 = %.1f 华氏度\n", temperature, result);
        } else if (choice == 2) {
            // 华氏度转摄氏度公式:C = (F - 32) × 5/9
            result = (temperature - 32) * 5 / 9;
            System.out.printf("%.1f 华氏度 = %.1f 摄氏度\n", temperature, result);
        } else {
            System.out.println("无效选项!");
        }
        
        scanner.close();
    }
}

运行结果 运行程序,依次输入1100,会得到:

请选择转换方向: 1.摄氏度 → 华氏度 2.华氏度 → 摄氏度 请输入选项:1 请输入温度值:100 100.0 摄氏度 = 212.0 华氏度

运行程序,依次输入2100,会得到:

请选择转换方向: 1.摄氏度 → 华氏度 2.华氏度 → 摄氏度 请输入选项:2 请输入温度值:100 100.0 华氏度 = 37.8 摄氏度

代码解析

  • 使用Scanner获取用户输入的选择和温度值。
  • 根据选择执行不同的转换。
  • 摄氏度转华氏度:乘以9/5再加32。
  • 华氏度转摄氏度:先减32再乘以5/9。
  • 使用printf格式化输出,结果保留一位小数。
  • 30摄氏度转换后是86.0华氏度
  • 86华氏度转换后是30.0摄氏度

温度转换工具类

编写程序,把温度转换功能封装成工具类,在需要转换时可以调用方法,方便重复使用。

# 源文件保存为“TestTemperature.java”。
class TemperatureUtils {
    
    // 摄氏度转华氏度
    public static double celsiusToFahrenheit(double celsius) {
        return celsius * 9 / 5 + 32;
    }
    
    // 华氏度转摄氏度
    public static double fahrenheitToCelsius(double fahrenheit) {
        return (fahrenheit - 32) * 5 / 9;
    }
    
    // 判断是否发烧(口腔温度超过37.5℃)
    public static boolean isFever(double celsius) {
        return celsius > 37.5;
    }
}

// 测试类
public class TestTemperature {
    public static void main(String[] args) {
        double normalTemp = 36.5;
        double feverTemp = 38.2;
        
        System.out.println("正常体温:" + 
            TemperatureUtils.celsiusToFahrenheit(normalTemp) + "℉");
        
        System.out.println("发烧体温:" + 
            TemperatureUtils.celsiusToFahrenheit(feverTemp) + "℉");
        
        System.out.println("是否发烧:" + 
            TemperatureUtils.isFever(feverTemp));
    }
}

运行结果

正常体温:97.7℉ 发烧体温:100.76℉ 是否发烧:true

代码解析

  • 将转换逻辑封装在TemperatureUtils工具类中
  • 增加了判断是否发烧的实用方法
  • 测试类演示了工具类的使用方法
  • 36.5℃等于97.7℉
  • 38.2℃属于发烧温度
  • 这种封装方式使代码更易于维护和复用

温度区间转换

编写程序,将把天气预报中的温度区间进行转换。

# 源文件保存为“TemperatureRange.java”。
class TemperatureUtils {
    
    // 摄氏度转华氏度
    public static double celsiusToFahrenheit(double celsius) {
        return celsius * 9 / 5 + 32;
    }
    
    // 华氏度转摄氏度
    public static double fahrenheitToCelsius(double fahrenheit) {
        return (fahrenheit - 32) * 5 / 9;
    }
    
    // 判断是否发烧(口腔温度超过37.5℃)
    public static boolean isFever(double celsius) {
        return celsius > 37.5;
    }
}

public class TemperatureRange {
    public static void main(String[] args) {
        double[] celsiusRange = {15.0, 25.0}; // 15℃~25℃
        
        double minF = TemperatureUtils.celsiusToFahrenheit(celsiusRange[0]);
        double maxF = TemperatureUtils.celsiusToFahrenheit(celsiusRange[1]);
        
        System.out.printf("温度区间:%.1f℃ ~ %.1f℃ (%.1f℉ ~ %.1f℉)\n",
            celsiusRange[0], celsiusRange[1], minF, maxF);
    }
}

运行结果

温度区间:15.0℃ ~ 25.0℃ (59.0℉ ~ 77.0℉)

代码解析

  • 对温度区间的两个端点分别转换
  • 15℃ ~ 25℃相当于59.0℉ ~ 77.0℉
  • 使用工具类的方法避免重复代码
  • 展示了数组在温度转换中的应用

温度对比表

编写畅享,生成一个摄氏度和华氏度的对比表。

# 源文件保存为“TemperatureTable.java”。
class TemperatureUtils {

    // 摄氏度转华氏度
    public static double celsiusToFahrenheit(double celsius) {
        return celsius * 9 / 5 + 32;
    }

    // 华氏度转摄氏度
    public static double fahrenheitToCelsius(double fahrenheit) {
        return (fahrenheit - 32) * 5 / 9;
    }

    // 判断是否发烧(口腔温度超过37.5℃)
    public static boolean isFever(double celsius) {
        return celsius > 37.5;
    }
}

public class TemperatureTable {
    public static void main(String[] args) {
        System.out.println("摄氏度\t华氏度");
        System.out.println("=======\t=======");
        
        for (int celsius = -10; celsius <= 40; celsius += 5) {
            double fahrenheit = TemperatureUtils.celsiusToFahrenheit(celsius);
            System.out.printf("%d℃\t%.1f℉\n", celsius, fahrenheit);
        }
    }
}

运行结果

摄氏度 华氏度 ======= ======= -10℃ 14.0℉ -5℃ 23.0℉ 0℃ 32.0℉ 5℃ 41.0℉ 10℃ 50.0℉ 15℃ 59.0℉ 20℃ 68.0℉ 25℃ 77.0℉ 30℃ 86.0℉ 35℃ 95.0℉ 40℃ 104.0℉

代码解析

  • 使用循环生成-10℃到40℃的对比表
  • 每隔5℃显示一个数据点
  • -10℃等于14℉,0℃等于32℉,40℃等于104℉
  • 展示了循环在温度转换中的应用

温度单位枚举

编写程序,使用枚举定义温度单位,使代码更规范。

# 源文件保存为“AdvancedConverter.java”。
public class AdvancedConverter {
    enum TemperatureUnit { CELSIUS, FAHRENHEIT }
    
    public static double convert(double temp, TemperatureUnit from, TemperatureUnit to) {
        if (from == to) return temp;
        
        if (from == TemperatureUnit.CELSIUS) {
            return temp * 9 / 5 + 32;
        } else {
            return (temp - 32) * 5 / 9;
        }
    }
    
    public static void main(String[] args) {
        double bodyTemp = 37.0;
        double converted = convert(bodyTemp, 
            TemperatureUnit.CELSIUS, 
            TemperatureUnit.FAHRENHEIT);
        
        System.out.println("正常体温:" + converted + "℉");
    }
}

运行结果

正常体温:98.6℉

代码解析

定义TemperatureUnit枚举表示温度单位 转换方法根据枚举值决定转换方向 37℃等于98.6℉ 展示了枚举在温度转换中的应用

实践练习题

练习:温度预警程序

编写程序,根据输入的摄氏温度给出预警提示。

# 源文件保存为“TemperatureAlert.java”。
import java.util.Scanner;

public class TemperatureAlert {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入当前温度(℃):");
        double temp = scanner.nextDouble();
        
        if (temp > 40) {
            System.out.println("红色预警!极端高温");
        } else if (temp > 35) {
            System.out.println("橙色预警!高温天气");
        } else if (temp < -10) {
            System.out.println("红色预警!极端低温");
        } else if (temp < 0) {
            System.out.println("蓝色预警!低温天气");
        } else {
            System.out.println("温度适宜");
        }
        
        scanner.close();
    }
}

运行结果 运行程序,输入36,会得到:

请输入当前温度(℃):36 橙色预警!高温天气

运行程序,输入26,会得到:

请输入当前温度(℃):26 温度适宜

代码解析

  • 40℃以上为极端高温红色预警
  • 35℃以上为高温橙色预警
  • -10℃以下为极端低温红色预警
  • 0℃以下为低温蓝色预警

练习:温度记录分析

编写程序,分析一周的温度数据,找出最高温和最低温。

# 源文件保存为“TemperatureAnalyzer.java”。
class TemperatureUtils {

    // 摄氏度转华氏度
    public static double celsiusToFahrenheit(double celsius) {
        return celsius * 9 / 5 + 32;
    }

    // 华氏度转摄氏度
    public static double fahrenheitToCelsius(double fahrenheit) {
        return (fahrenheit - 32) * 5 / 9;
    }

    // 判断是否发烧(口腔温度超过37.5℃)
    public static boolean isFever(double celsius) {
        return celsius > 37.5;
    }
}
public class TemperatureAnalyzer {
    public static void main(String[] args) {
        double[] weeklyTemp = {22.5, 24.0, 19.5, 18.0, 25.5, 27.0, 23.5};
        
        double max = weeklyTemp[0];
        double min = weeklyTemp[0];
        
        for (double temp : weeklyTemp) {
            if (temp > max) max = temp;
            if (temp < min) min = temp;
        }
        
        System.out.printf("本周最高温度:%.1f℃ (%.1f℉)\n", 
            max, TemperatureUtils.celsiusToFahrenheit(max));
        System.out.printf("本周最低温度:%.1f℃ (%.1f℉)\n", 
            min, TemperatureUtils.celsiusToFahrenheit(min));
    }
}

运行结果

本周最高温度:27.0℃ (80.6℉) 本周最低温度:18.0℃ (64.4℉)

代码解析

  • 使用数组存储一周温度数据
  • 遍历数组找出最大值和最小值
  • 27.0℃是本周最高温(80.6℉)
  • 18.0℃是本周最低温(64.4℉)
  • 展示了数组遍历和工具类的结合使用