繁体   English   中英

如何在只有一个字段的类中进行温度转换?

[英]How can I do temperature conversion in a class with only one field?

温度主要以三种单位测量:摄氏度、华氏度和开尔文。 很容易将它们中的任何一个转换为另外两个:

 Kelvin to Celsius: C = K - 273.15 Celsius to Kelvin: K = C + 273.15 Kelvin to Fahrenheit: F = 9./5*(K - 273.15) + 32 Fahrenheit to Kelvin: K = 5./9*(F - 32) + 273.15 Celsius to Fahrenheit: F = 9./5*C + 32 Fahrenheit to Celsius: C = 5./9*(F - 32)

用一个(而且只有一个!) double类型的私有字段编写类Temperature 该类的对象描述温度。 该类有一个构造函数和三个方法:

  • Temperature(double tm, char unit) — 构造函数获取温度(作为double )和所用单位的符号:“C”代表摄氏度,“F”代表华氏度,“K”代表开尔文;

  • 返回对象表示的温度的三种方法(“getter”),但单位不同:

     public double getInC() public double getInF() public double getInK()

如果我们没有 char 类型的字段并且我们无法将任何参数放入函数中,我真的不明白该怎么做,如何解决?

以下是我到目前为止所拥有的。 显然还达不到要求。

public class Temperature {
    private final double tm;
    public Temperature(double tm, char unit) {
        this.tm = tm;
    }
    public double getInC(){
    }
    public double getInF(){
    }
    public double getInK(){
    }
}

只需为单位创建一个字段,然后您就拥有了进行转换所需的所有信息:

public class Temperature {
    private final double tm;
    private final char unit;

    public Temperature(double tm, char unit) {
        this.tm = tm;
        this.unit = unit;
    }

    public double getInC() {
        // TODO: conversion
    }

    public double getInF() {
        // TODO: conversion
    }

    public double getInK() {
        // TODO: conversion
    }

    @Override
    public String toString() {
        return tm + "" + unit;
    }
}

顺便说一句,您在这里拥有的称为“值对象”,建议添加一个toString()方法,以便您可以根据需要打印温度(稍后还添加equalshashcode方法以按值比较实例)。

如果您不想添加字段,则替代解决方案:将构造函数中给定的温度转换为内部单位(建议:以 K 为单位),然后从 Kelvin 转换为请求的温度。

这是“替代解决方案”的示例:

public class Temperature {

    private double value = 0d;

    Temperature(double value, char unit) {
        this.value = value;
        switch (unit) {
        case 'C':
            this.value = value;
            break;
        case 'K':
            this.value = value - 273.15;
            break;
        case 'F':
            this.value = 5.0 / 9 * (value - 32);
            break;
        }
        System.out.println("Temperature is " + value + "°" + unit);
    }

    double getInC() {
        return value;
    }

    double getInF() {
        return 9.0 / 5 * value + 32;
    }

    double getInK() {
        return value + 273.15;
    }

    public static void main(String[] args) {
        Temperature test = new Temperature(42, 'C');
        System.out.println("\t" + test.getInC() + "°C");
        System.out.println("\t" + test.getInK() + "°K");
        System.out.println("\t" + test.getInF() + "°F");

        test = new Temperature(42, 'K');
        System.out.println("\t" + test.getInC() + "°C");
        System.out.println("\t" + test.getInK() + "°K");
        System.out.println("\t" + test.getInF() + "°F");

        test = new Temperature(42, 'F');
        System.out.println("\t" + test.getInC() + "°C");
        System.out.println("\t" + test.getInK() + "°K");
        System.out.println("\t" + test.getInF() + "°F");
    }

希望能帮助到你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM