我正在使用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());
}
像角度,计算机这样的每个类别都有这么多单位。这只是温度类别的一个小例子。
答案 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。