Java 关于转换逻辑的一个问题
我正在用android设计一个单位转换器。我使用的逻辑不是很好的逻辑,我想我在这里也给出了一些代码。有人能给我推荐更好的逻辑吗Java 关于转换逻辑的一个问题,java,android,Java,Android,我正在用android设计一个单位转换器。我使用的逻辑不是很好的逻辑,我想我在这里也给出了一些代码。有人能给我推荐更好的逻辑吗 public void temperature(String value1,String value2) { if(value1.equals("Celsius") && value2.equals("fahrenheit") ) { double i=Dou
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 你的公式完全错了。大错特错。你知道正确的公式吗?如果你知道除了说错以外,你能给我推荐一些好的公式吗。。。。