关于转换逻辑的问题

时间:2011-05-24 13:48:12

标签: java android

我正在使用android.i m设计一个使用逻辑的单位转换器,我认为这不是很好的逻辑,我也在这里提供一些代码。任何人都建议我更好的逻辑????

public void temperature(String value1,String value2)
        {
            if(value1.equals("Celsius") && value2.equals("fahrenheit") )
            {
                double i=Double.parseDouble(at1.getText().toString());
                double value=i*33.8;
                Double d=new Double(value);
                at2.setText(d.toString());
            }
            else if(value1.equals("fahrenheit") && value2.equals("Celsius"))
            {
                double i=Double.parseDouble(at1.getText().toString());
                double value=i*(-17.2222);
                Double d=new Double(value);
                at2.setText(d.toString());
            }

像角度,计算机这样的每个类别都有这么多单位。这只是温度类别的一个小例子。

3 个答案:

答案 0 :(得分:0)

为什么不

at2.setText(String.valueOf(Double.parseDouble(at1.getText().toString()) * 33.8);

无论如何,只是缩短你的代码,逻辑保持不变。

P.S。为33.8和-17.2222等值定义一些常量。

答案 1 :(得分:0)

您的示例中有很多重复的代码。尝试重构它,这样你只需要表达一次共同的行为。

示例:

public void temperature(String value1, String value2) {
    double i = Double.parseDouble(at1.getText().toString());
    double value;
    if (value1.equals("fahrenheit") && value2.equals("celsius")) {
        value = /* convert i */;
    } else if (....) {
        value = ...;
    }
    at2.setText(String.valueOf(value));
}

如果您的if语句列表变大,请考虑使用switch语句。您可能希望将单位的表示从String更改为整数常量或枚举等其他内容。

答案 2 :(得分:0)

我的建议是使用命令模式。

对于温度,我相信您可以使用开尔文转换为通用比例:

public class TemperatureConverter {

    private final static String CELSIUS = "Celsius";
    private final static String FARENHEIT = "Farenheit";

    public double temperature(double temperature, String temp1Type, String temp2Type) {
        Converter fromConverter, toConverter;

        if (temp1Type.equals(CELSIUS)) {
            fromConverter = new CelsiusConverter();
        } else if (temp1Type.equals(FARENHEIT)) {
            fromConverter = new FarenheitConverter();
        } else {
            fromConverter = new noopConverter();
        }

        if (temp2Type.equals(CELSIUS)) {
            toConverter = new CelsiusConverter();
        } else if (temp2Type.equals(FARENHEIT)) {
            toConverter = new FarenheitConverter();
        } else {
            toConverter = new noopConverter();
        }

        return toConverter.fromKelvin(fromConverter.toKelvin(temperature));
    }
}

Converter是一个接口,FarenheitConverter和CelsiusConverter是实现此接口的具体类。它们包含从Farenheit和Celsius(分别)转换为Kelvin的细节。它们还包含从开尔文转换到各自尺度的细节。这使逻辑保持清晰分离,并在将来轻松扩展。

将来你需要将度数从blignox转换为度量fizzbuzz。它就像编写BlignoxConverter和FizzbuzzConverter一样简单,实现这两种方法,然后将它们插入。一旦编写和集成,您就可以将这些方法中的任何一个转换为F或C。