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