我可以将华氏度转换为摄氏度,但反过来不行。我附上了下面的代码。希望这足以了解发生了什么。
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));
}
}
最佳答案
放一个
System.out.println(arg0.getActionCommand());
在您的方法中,据推测您会在使用摄氏按钮时看到它不是“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;
}
});
关于java - Java 摄氏度到华氏度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5500264/