Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于转换逻辑的一个问题_Java_Android - Fatal编程技术网

Java 关于转换逻辑的一个问题

Java 关于转换逻辑的一个问题,java,android,Java,Android,我正在用android设计一个单位转换器。我使用的逻辑不是很好的逻辑,我想我在这里也给出了一些代码。有人能给我推荐更好的逻辑吗 public void temperature(String value1,String value2) { if(value1.equals("Celsius") && value2.equals("fahrenheit") ) { double i=Dou

我正在用android设计一个单位转换器。我使用的逻辑不是很好的逻辑,我想我在这里也给出了一些代码。有人能给我推荐更好的逻辑吗

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());
            }
每个类别中都有这样多的单位,比如角度、计算机。这只是温度类别的一个小例子。

为什么不

at2.setText(String.valueOf(Double.parseDouble(at1.getText().toString()) * 33.8);
无论如何,这只是为了缩短代码,逻辑保持不变


请为33.8和-17.2222等值定义一些常量。

您的示例中有大量重复的代码。尝试重构它,使您的常见操作只表达一次

例如:

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语句的列表变大,请考虑使用<代码>开关< /C>语句。您可能希望将单位的表示形式从

String
更改为整数常量或枚举。

我的建议是使用命令模式

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

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,也可以将它们转换为F和C

你的公式完全错了。大错特错。你知道正确的公式吗?如果你知道除了说错以外,你能给我推荐一些好的公式吗。。。。