温度转换在JFrame中无法正常工作

时间:2013-11-10 04:28:47

标签: java swing

我似乎无法弄清楚我在事件处理程序中做错了什么;我不是一个优秀的程序员。我可以从摄氏温度转换为华氏温度,但不能相反。它通常显示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("");
             }
         }
     } 
    

1 个答案:

答案 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)