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