如何用仅含一个double字段的Temperature类实现温度转换?
解决方案
核心思路是在构造方法中将输入的温度统一转换为某一标准单位(比如开尔文K)存储,无需额外保存单位字段,后续的三个获取方法直接基于这个标准值计算对应单位的温度。
温度转换公式(中文)
- 开尔文转摄氏度:
C = K - 273.15 - 摄氏度转开尔文:
K = C + 273.15 - 开尔文转华氏度:
F = 9.0/5*(K - 273.15) + 32 - 华氏度转开尔文:
K = 5.0/9*(F - 32) + 273.15 - 摄氏度转华氏度:
F = 9.0/5*C + 32 - 华氏度转摄氏度:
C = 5.0/9*(F - 32)
完整实现代码
public class Temperature { private final double tm; // 统一存储为开尔文(K)温度 public Temperature(double tm, char unit) { // 根据输入单位,将温度转换为开尔文存储 switch (Character.toUpperCase(unit)) { case 'C': this.tm = tm + 273.15; break; case 'F': this.tm = (5.0/9)*(tm - 32) + 273.15; break; case 'K': this.tm = tm; break; default: throw new IllegalArgumentException("不支持的温度单位:" + unit); } } public double getInC(){ return tm - 273.15; } public double getInF(){ return 9.0/5*(tm - 273.15) + 32; } public double getInK(){ return tm; } }
代码说明
- 构造方法:接收温度值和单位后,将温度统一转换为开尔文存储,后续无需再关注原始单位。
- getInC():从存储的开尔文值转换为摄氏度。
- getInF():从存储的开尔文值转换为华氏度。
- getInK():直接返回存储的开尔文温度值。
你也可以选择其他单位作为存储基准(比如摄氏度),只需调整构造方法中的转换逻辑和三个get方法的计算方式即可。
内容的提问来源于stack exchange,提问作者Shulhin Denys
相关产品推荐
相关产品推荐

