我可以从华氏温度转换为摄氏温度,但不是相反。我已附上以下代码。希望它足以看出发生了什么。
public void actionPerformed(ActionEvent arg0) {
double temps = 0, temp1 = 0;
String instrings;
instrings = temp.getText();
if(instrings.equals(""))
{
instrings = "0";
temp.setText("0");
}
temps = Double.parseDouble(instrings);
instrings = temp.getText();
if(instrings.equals(""))
{
instrings = "0";
temp.setText("0");
}
temp1 = Double.parseDouble(instrings);
if(arg0.getActionCommand().equals("C")){
temps = (( temps * 9)/5+32);
DecimalFormat formatters = new DecimalFormat("#,###,###.###");
results.setText(""+formatters.format(temps));
}
else if(arg0.getActionCommand().equals("F"));
{
temp1 = (((temps - 32)/9)*5);
DecimalFormat formatters = new DecimalFormat("#,###,###.###");
results.setText(""+formatters.format(temp1));
}
}
答案 0 :(得分:2)
放一个
System.out.println(arg0.getActionCommand());
在你的方法中,据说你在使用Celsius按钮时会看到它不是"C"
。
通常,请查看控制台以查看是否有任何错误消息。
另一个想法:您正在使用两个双变量temps
和temp1
,将instrings
解析为两个变量,然后将其中一个设置为结果。为什么这么复杂?
一般情况下,我建议不要使用getActionCommand()
方法,而是给每个按钮一个自己的ActionListener。您可以使用匿名类。由于两种情况几乎相同,所以在这里使用内部(甚至是本地)类的两个子类:
abstract class ConversionListener implement ActionListener {
DecimalFormat formatter = new DecimalFormat("#,###,###.##");
public void actionPerformed(ActionEvent e) {
String input = temp.getText();
if (input.equals("")) {
input = "0";
temp.setText(input);
}
double number = Double.parseDouble(input);
results.setText(formatter.format(convert(number)));
}
/** to implement by subclasses */
abstract double convert(double number);
}
celsiusToFahrenheit.addActionListener(new ConversionListener() {
double convert(double celsius) {
return number * 9 / 5 + 32;
}
});
fahrenheitToCelsius.addActionListener(new ConversionListener() {
double convert(double fahrenheit) {
return (fahrenheit - 32) / 9 * 5;
}
});
答案 1 :(得分:0)
不确定您遇到了什么问题,但这里是如何将Java中的Celsius转换为Fahrenheit。
float celsius = celsius value
float c=Float.parseFloat(celsius);
float f = 32 + 9*c/5;
答案 2 :(得分:0)
从
改变temp1 = (((temps - 32)/9)*5);
到
temp1 = (((temps - 32)*5)/9);
代替。
答案 3 :(得分:0)
在这一部分:
instrings = temp.getText();
if(instrings.equals(""))
{
instrings = "0";
temp.setText("0");
}
temps = Double.parseDouble(instrings);
instrings = temp.getText();
if(instrings.equals(""))
{
instrings = "0";
temp.setText("0");
}
temp1 = Double.parseDouble(instrings);
我是否遗漏了某些东西,或者temps和temp1都设置为相同的值?或者是否可能在temps赋值之间temp.getText()可以返回不同的值?
如果相同,首先将其重写为
instrings = temp.getText();
if(instrings.equals(""))
{
instrings = "0";
temp.setText("0");
}
temps = Double.parseDouble(instrings);
temp1 = Double.parseDouble(instrings);
甚至temp1 = temps
此外,一些更好的变量命名可能更容易,temps,temp和temp1都非常相似。一个似乎是来自控件的文本,另外两个是数值。
甚至像" inputTemperature'和'计算温度'大力提高代码的可读性。
这对解决您的问题没有帮助,但将来可能有助于调试。