Java中的摄氏温度到华氏温度

时间:2011-03-31 13:02:48

标签: java

我可以从华氏温度转换为摄氏温度,但不是相反。我已附上以下代码。希望它足以看出发生了什么。

    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));  
        }  
    }

4 个答案:

答案 0 :(得分:2)

放一个

System.out.println(arg0.getActionCommand());

在你的方法中,据说你在使用Celsius按钮时会看到它不是"C"

通常,请查看控制台以查看是否有任何错误消息。


另一个想法:您正在使用两个双变量tempstemp1,将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'和'计算温度'大力提高代码的可读性。

这对解决您的问题没有帮助,但将来可能有助于调试。