2

我似乎无法弄清楚我在事件处理程序中做错了什么;而且我不是一个好的程序员。我可以从摄氏转换为华氏,但反过来不行。对于华氏到摄氏的转换,它通常显示 0.0。我认为这可能与cfList 有关,这是我选择摄氏度或华氏度的 JComboBox。

此外,我希望能够在不输入值的情况下单击转换按钮,并且 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("");
             }
         }
     } 
    
4

1 回答 1

4

您的问题标题指出:

温度转换无法正常工作...

几乎总是这是由于您在不知不觉中进行了 int 除法,事实上,这正是发生的事情:

far = cel*(9/5)+32;

将 9/5 更改为 9.0/5.0

far = cel * (9.0 / 5.0) + 32;

为什么这很重要?int 除法(一个 int 除以另一个)总是返回一个 int,小数部分被截断。所以 9/5 返回 1,而 5/9 返回 0。如果您希望计算保留小数部分,则除法方程中必须至少有一个双精度数,所以实际上 9.0 / 5 可以正常工作((double)9/5)

于 2013-11-10T04:31:54.173 回答