我正在制作一个程序,将一个温度转换为另一个温度。例如,华氏度到摄氏度,摄氏度到华氏度,摄氏度到开尔文等等。
我已经设置了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;
}
我认为为了找到逻辑错误,我认为所有代码都是必需的。
任何帮助将不胜感激,因为我不明白为什么会这样。
答案 0 :(得分:2)
这是你的分裂的典型案例(例如(5/9
))在整数算术中执行(将丢弃余数)。
您需要在分割之前将至少一个文字提升为double
类型; e.g。
5.0 / 9
如果编译器在运算符的操作数中检测到int
和double
,则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
。由于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摄氏度。所以你刚刚交换了三个领域。您的Kelvin字段标记为Fahrenheit,您的Celsius字段标记为Kelvin,而您的Fahrenheit字段标记为Celsius。