Java 温度转换在JFrame中工作不正常

Java 温度转换在JFrame中工作不正常,java,swing,Java,Swing,我似乎无法找出我在事件处理程序中做错了什么;我不是一个好的程序员。我可以把摄氏度转换成华氏度,但反过来不行。它通常显示0.0表示华氏到摄氏的转换。我认为这可能与cfList有关,cfList是我选择摄氏或华氏温度的JComboBox 此外,我希望能够在不输入值的情况下单击convert按钮,JTextField将自动设置为零,并显示一条消息,表明value set为零 那么,我如何才能让这整件事顺利进行: 将摄氏度转换为华氏度 将华氏温度转换为摄氏温度 将摄氏度转换为华氏度,但不将值设置为零 将

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

此外,我希望能够在不输入值的情况下单击convert按钮,JTextField将自动设置为零,并显示一条消息,表明value set为零

那么,我如何才能让这整件事顺利进行:

将摄氏度转换为华氏度 将华氏温度转换为摄氏温度 将摄氏度转换为华氏度,但不将值设置为零 将华氏温度转换为摄氏温度,但不将值设置为零

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

你的问题标题是:

温度转换工作不正常

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

far = cel*(9/5)+32;
将9/5更改为9.0/5.0

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

为什么这很重要?整数除法将一个整数除以另一个整数总是返回一个整数,小数部分被截断。所以9/5返回1,5/9返回0。如果您希望计算保留分数部分,则至少必须有一个double是除法方程的一部分,因此事实上9.0/5与double 9/5一样适用。您的问题标题说明:

温度转换工作不正常

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

far = cel*(9/5)+32;
将9/5更改为9.0/5.0

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

为什么这很重要?整数除法将一个整数除以另一个整数总是返回一个整数,小数部分被截断。所以9/5返回1,5/9返回0。如果您希望计算保留分数部分,那么至少有一个double必须是除法方程的一部分,因此事实上9.0/5可以很好地工作,就像double 9/5可以工作一样,谢谢dude。不过,我仍然有一个问题:当我的JTextField为空时,如何单击convert按钮并将其设置为零,而不会收到错误消息?@user2975427:在尝试对JTextField进行计算之前,请检查它所包含的字符串。或者使用try/catch块,捕捉numberformatceptions。这很有效,谢谢老兄。不过,我仍然有一个问题:当我的JTextField为空时,如何单击convert按钮并将其设置为零,而不会收到错误消息?@user2975427:在尝试对JTextField进行计算之前,请检查它所包含的字符串。或者使用try/catch块,捕捉numberformatceptions。