不管是看天气预报还是做科学实验,经常需要在华氏度和摄氏度之间转换。今天来实现这个的温度转换程序。
案例解析
温度双向转换
编写程序,实现华氏度和摄氏度互相转换的实现。
# 源文件保存为“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();
}
}
运行结果
运行程序,依次输入1和100,会得到:
请选择转换方向: 1.摄氏度 → 华氏度 2.华氏度 → 摄氏度 请输入选项:1 请输入温度值:100 100.0 摄氏度 = 212.0 华氏度
运行程序,依次输入2和100,会得到:
请选择转换方向: 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℉)
- 展示了数组遍历和工具类的结合使用