2014-01-07 52 views
-1

我正在制作一个程序将一个温度转换为另一个温度。例如,华氏温度到摄氏度,摄氏温度到华氏温度,摄氏温度到开氏温度等。温度转换中的逻辑错误

我已经设置了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; 
} 

这就是我认为为了找到逻辑错误而需要的所有代码。

任何帮助将不胜感激,因为我不明白为什么会发生这种情况。

+2

你得到了什么错误? –

+0

编译时没有确切的错误。但是当我在转换框中输入27时,我得到270.2(重复)而不是80.6。开尔文获得-2.7(重复)而不是300。 – TaylorTDHouse

回答

2

这是您的部门的经典案例(例如(5/9))正在执行整数算术(将丢弃其余部分)。

您需要在划分之前将至少一个文字提升为double类型;例如

5.0/9 

如果编译器检测到int和在操作员的操作数A doubleint类型被促进double之前计算。

+0

是啊,这就是我以前的想法,但它并不能完全解决这个问题当时还是现在,这使我相信这是其他地方的问题。 – TaylorTDHouse

+0

关于摄氏和摄氏度的最后部分并不完全正确。你误解了维基百科的文章。术语“摄氏度”和“摄氏度”是确切的同义词 - 它们不相差0.01。 –

+1

根据您链接到:-)名称已由“摄氏度”改为“摄氏度”,以避免各种语言的词作角度衡量混乱的文章。意思是相同的。凯尔文和摄氏度之间的差异是273.15。它不是273.16。 –

-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摄氏度。所以你只是换了三个字段。你的开尔文字段被标记为华氏,你的摄氏字段标记为开尔文,你的华氏字段标记为摄氏。

+0

没有改变任何东西:\ – TaylorTDHouse

0

bathsheba是正确的改变5至5.0将做的trick.I写下面的代码,它是工作 /*包什么; //不要放包名! */

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; 
} 
} 

如果这没有解决您的问题,那么我敢肯定问题不是出在你的逻辑及其一些别的地方。

+0

这只是问题的一部分。问题的另一个重要部分是OP已经交换了各个字段 - 请参阅我的答案以获取详细信息。 –