Java 爪哇的摄氏度到华氏度

Java 爪哇的摄氏度到华氏度,java,Java,我可以把华氏温度转换成摄氏温度,但反过来不行。我已经附上下面的代码。希望这足以让我们看到发生了什么 public void actionPerformed(ActionEvent arg0) { double temps = 0, temp1 = 0; String instrings; instrings = temp.getText(); if(instrings.equals(""))

我可以把华氏温度转换成摄氏温度,但反过来不行。我已经附上下面的代码。希望这足以让我们看到发生了什么

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

不确定您遇到了什么问题,但下面是如何在Java中将摄氏度转换为华氏度

float celsius = celsius value
float c=Float.parseFloat(celsius);
float f = 32 + 9*c/5;

temp1 = (((temps - 32)/9)*5);  

相反。

放一个

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;
    }
});
关于这一部分:

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都设置为相同的值?或者temp.getText()是否可能在两个temp赋值之间返回不同的值

如果是相同的,那么首先将其改写为

    instrings = temp.getText();  
    if(instrings.equals(""))  
    {  
        instrings = "0";  
        temp.setText("0");  
    }  
    temps = Double.parseDouble(instrings);  
    temp1 = Double.parseDouble(instrings);
甚至
temp1=temps

此外,一些更好的变量命名可能更容易,temp、temp和temp1都非常相似。一个显示为控件中的文本,另两个为数值

即使是像“inputTemperature”和“calculatedTemperature”这样的名称,也能大大提高代码的可读性


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

您的代码在做什么或不做什么?您还试图从temp.getText获取一个值,除非temp是这个类可以访问的变量,否则我看不出您如何不获取空指针异常它在做什么,它与您希望它做什么有什么不同?您不能转换是什么意思?你有错误或不正确的输出吗?@It Grunt:我可以在farenheit中输入一个学位,它会转换为celcius,但如果我在celcius中输入一个学位,它不会转换为farenheit。@CoolBeans:除非我从farenheit转换为celcius,否则它什么都不会做。这会实现什么?这些是完全一样的东西。
    instrings = temp.getText();  
    if(instrings.equals(""))  
    {  
        instrings = "0";  
        temp.setText("0");  
    }  
    temps = Double.parseDouble(instrings);  
    temp1 = Double.parseDouble(instrings);