温度转换中的逻辑错误
我正在制作一个程序将一个温度转换为另一个温度。例如,华氏温度到摄氏度,摄氏温度到华氏温度,摄氏温度到开氏温度等。温度转换中的逻辑错误
我已经设置了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;
}
这就是我认为为了找到逻辑错误而需要的所有代码。
任何帮助将不胜感激,因为我不明白为什么会发生这种情况。
这是您的部门的经典案例(例如(5/9
))正在执行整数算术(将丢弃其余部分)。
您需要在划分之前将至少一个文字提升为double
类型;例如
5.0/9
如果编译器检测到int
和在操作员的操作数A double
则int
类型被促进到double
之前计算。
是啊,这就是我以前的想法,但它并不能完全解决这个问题当时还是现在,这使我相信这是其他地方的问题。 – TaylorTDHouse
关于摄氏和摄氏度的最后部分并不完全正确。你误解了*的文章。术语“摄氏度”和“摄氏度”是确切的同义词 - 它们不相差0.01。 –
根据您链接到:-)名称已由“摄氏度”改为“摄氏度”,以避免各种语言的词作角度衡量混乱的文章。意思是相同的。凯尔文和摄氏度之间的差异是273.15。它不是273.16。 –
而不是(c/(5/9)) + 32
,请写c * 9/5 + 32
。由于c
是double
,因此该表达式始终为double
,并且您不会遇到整数除法问题。
而不是(5/9) * (f - 32)
,请写(f - 32) * 5/9
。由于f
是double
,因此整个表达式将为double
,并且您不会遇到整数除法问题。
更新
代替(9/5) * convertKtoC(k)
此外,写convertKtoC(k) * 9/5
,出于同样的原因。
再次更新
上述变动都需要做。但是你也有一个不同的问题。我相信你只是错误地标记了你的文本字段。 27华氏温度是270.2222开尔文,即-2.7777摄氏度。所以你只是换了三个字段。你的开尔文字段被标记为华氏,你的摄氏字段标记为开尔文,你的华氏字段标记为摄氏。
没有改变任何东西:\ – TaylorTDHouse
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;
}
}
如果这没有解决您的问题,那么我敢肯定问题不是出在你的逻辑及其一些别的地方。
这只是问题的一部分。问题的另一个重要部分是OP已经交换了各个字段 - 请参阅我的答案以获取详细信息。 –
你得到了什么错误? –
编译时没有确切的错误。但是当我在转换框中输入27时,我得到270.2(重复)而不是80.6。开尔文获得-2.7(重复)而不是300。 – TaylorTDHouse