温度转换中的逻辑误差

时间:2014-01-07 08:26:15

标签: java logic temperature

我正在制作一个程序,将一个温度转换为另一个温度。例如,华氏度到摄氏度,摄氏度到华氏度,摄氏度到开尔文等等。

我已经设置了GUI,但现在我在转换过程中遇到错误。我已经找了转换方法,但似乎找不到任何转换方法。所以我根据我在网上看过的公式来编写它们。

private static class EventHandler implements ActionListener {
    /**
     * this method gets called when an object we are listening to is interacted with
     *
     * @param evt    ActionEvent that interacted with
     */
    public void actionPerformed(ActionEvent evt) {
        //creates the formating we would like for the numbers
        DecimalFormat df = new DecimalFormat("#.##");
        //if the event triggered was celInput than
        if (evt.getSource() == cText) {
            String strcText = cText.getText();
            double cTemp = Double.parseDouble(strcText);
            fText.setText("" + convertCtoF(cTemp));
            kText.setText("" + convertCtoK(cTemp));
        }else if(evt.getSource() == fText) {
           String strfText = fText.getText();
           double fTemp = Double.parseDouble(strfText);
           cText.setText("" + convertFtoC(fTemp));
           kText.setText("" + convertFtoK(fTemp));
        }else if(evt.getSource() == kText) {
           String strkText = kText.getText();
           double kTemp = Double.parseDouble(strkText);
           cText.setText("" + convertKtoC(kTemp));
           fText.setText("" + convertKtoF(kTemp));
        }       
    }//end actionPerformed method
}
public static double convertCtoF(double c) {
    return (c / (5/9)) + 32;
}
public static double convertFtoC(double f) {
    return (5/9) * (f - 32);
}
public static double convertCtoK(double c) {
    return c + 273.15;
}
public static double convertFtoK(double f) {
    return convertFtoC(f) + 273.15;
}
public static double convertKtoC(double k) {
    return k - 273.15;
}
public static double convertKtoF(double k) {
    return ((9/5) * convertKtoC(k)) + 32;
}

我认为为了找到逻辑错误,我认为所有代码都是必需的。

任何帮助将不胜感激,因为我不明白为什么会这样。

3 个答案:

答案 0 :(得分:2)

这是你的分裂的典型案例(例如(5/9))在整数算术中执行(将丢弃余数)。

您需要在分割之前将至少一个文字提升为double类型; e.g。

5.0 / 9

如果编译器在运算符的操作数中检测到intdouble,则int类型会提升double在计算之前。

答案 1 :(得分:0)

bathsheba是正确的改变5到5.0将做的技巧。我写下面的代码,它的工作     / *包什么; //不要放包名! * /

import java.util.*;
import java.lang.*;
import java.io.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
    // your code goes here
    double cTemp = Double.parseDouble("27");
        System.out.println("" + convertCtoF(cTemp));
        System.out.println("" + convertCtoK(cTemp));
}
 public static double convertCtoF(double c) {
  return (c / (5.0/9.0)) + 32;
 }
 public static double convertCtoK(double c) {
 return c + 273.15;
}
}

如果这不能解决您的问题,那么我很确定问题不在您的逻辑中,而是在其他地方。

答案 2 :(得分:-1)

而不是(c / (5/9)) + 32,请写c * 9 / 5 + 32。由于cdouble,因此该表达式将始终为double,并且您不会遇到整数除法的问题。

而不是(5/9) * (f - 32),请写(f - 32) * 5 / 9。由于fdouble,因此该表达式将始终为double,并且您不会遇到整数除法的问题。

<强>更新

此外,出于同样的原因,请写(9/5) * convertKtoC(k)而不是convertKtoC(k) * 9 / 5

再次更新

以上所有变更都需要完​​成。但是你也有不同的问题。我相信你刚刚错误地标记了你的文本字段。 27华氏温度是270.2222开尔文,是-2.7777摄氏度。所以你刚刚交换了三个领域。您的Kelvin字段标记为Fahrenheit,您的Celsius字段标记为Kelvin,而您的Fahrenheit字段标记为Celsius。