我似乎无法弄清楚我在事件处理程序中做错了什么;我不是一个优秀的程序员。我可以从摄氏温度转换为华氏温度,但不能相反。它通常显示0.0华氏度到摄氏度的转换。我认为它可能与 cfList 有关,这是我的JComboBox选择Celsius或Fahrenheit。
此外,我希望能够在不放入值的情况下单击转换按钮,并且JTextField将自动设置为零并显示“值设置为零”的消息。
那么我怎样才能让这整件事情发挥作用:
将华氏度转换为没有值的值(设置为零)
class TCalcButtonHandler implements ActionListener {
public void actionPerformed(ActionEvent e) {
double far, cel;
String ff, cc;
String inString;
inString = tempField.getText();
if(inString==null && cfList.getSelectedIndex() == 0)
{
degree.setText("F");
cel=0;
far = cel*(9/5)+32;
ff = far+"";
resultField.setText(ff);
tempSysField.setText("Value set to zero");
}
if(inString==null && cfList.getSelectedIndex() == 1)
{
degree.setText("C");
far=0;
cel = (5/9)*(far-32);
cc = cel+"";
resultField.setText(cc);
tempSysField.setText("Value set to zero");
}
if(cfList.getSelectedIndex()==0 && inString!=null)
{
degree.setText("F");
cel = Double.parseDouble(inString);
far = cel*(9/5)+32;
ff = far+"";
resultField.setText(ff);
tempSysField.setText("");
}
if(cfList.getSelectedIndex()==1 && inString!=null)
{
degree.setText("C");
far = Double.parseDouble(inString);
cel = (far-32)*(5/9);
cc = cel+"";
resultField.setText(cc);
tempSysField.setText("");
}
}
}
答案 0 :(得分:4)
您的问题标题说明:
温度转换无法正常工作......
几乎总是这是因为你在不知不觉中进行了int划分,事实上,这正是发生的事情:
far = cel*(9/5)+32;
将9/5更改为9.0 / 5.0
far = cel * (9.0 / 5.0) + 32;
为什么这很重要? int division(将一个int除以另一个)总是返回一个int,小数部分被截断。所以9/5返回1并且5/9返回0.如果你想要计算保留小数部分,那么至少有一个double必须是除法方程的一部分,所以实际上9.0 / 5可以正常工作((double)9/5)