如何实现温度转换器的最佳方法

时间:2015-11-11 13:04:04

标签: java performance class

我已经实现了一个以摄氏温度转换温度的类。我的问题是实施温度转换器的最佳方法是什么?这是我用过的解决方案。

public TemperatureConverter(double measurement, String unit) {
    if(unit.equals("F")){
        result = (measurement - 32) * 5 / 9;
    }
    else if(unit.equals("K")){
        result = measurement + KELVIN_TO_CELSIUS;
    }
    else if(unit.equals("R")){
        result = (5 / 4) * measurement;
    }
}

然后, toCelsius 方法。

public double toCelsius() {
    return result;
}

该类的属性:

private final double KELVIN_TO_CELSIUS = 273.15;
private double result;

2 个答案:

答案 0 :(得分:1)

您的解决方案似乎不完整:

您的计划中的{p> 100c(摄氏度)将为273.15,就像0c甚至10000c仍为273.15一样,这是错误的,此外,您永远不会输出新的计量单位。

首先,创建一个静态方法(转换不需要一个对象),它接收一个数字,一个条目值的测量单位,以及一个输出值的测量单位,并返回一个数字

public static double convertValue(double value, String to){
   if(to.equals("c")){
      return value;
   } else {
      if(to.equals("k")){
         return value + 273.15;
      } else {
         return (value - 32) * 5 / 9;
      }
   }
}

要使用此功能,请执行System.out.println(TemperatureConverter.convertValue(50, "k"));System.out.println(TemperatureConverter.convertValue(50, "f"));

答案 1 :(得分:1)

仅为转换创建新对象不是最好的方法。如果你的课程比这更多,那么他们可能是创建TemperatureConverter对象的原因。 如果转换是您唯一需要的,那么您可以创建一个通用静态类,它也可以包含您的程序所需的常见任务,或者您可以使用静态函数创建TemperatureConverter来进行转换。

您可以为每次转化设置单独的静态函数,例如:

double Util.celciusTo(double temp, TempUnit to) 
double Util.fahrenheitTo(double temp, TempUnit to)
double Util.kelvinTo(double temp, TempUnit to)

TempUnit是温度单位枚举。您可以创建Util类并添加更多实用程序功能,也可以创建包含上述静态函数的TemperatureConverter,仅用于温度转换。

如果你的TemperatureConverter做的不仅仅是转换,比如比较温度来排序List等,那么你可以拥有这样的课程,但是你应该做的事情很少:

  • 不要在构造函数中进行转换。按需执行
  • 提供当前值和单位的getter函数
  • 提供三个转换功能,用于更新对象的内部状态(更新测量和单位)并返回更新后的值
  • 覆盖toString函数以便很好地打印值