我正在尝试在JFrame中运行简单的温度转换。 然而,无论华氏温度如何,华氏温度转换为细胞(整数)的温度都会返回到零。代码如下,主要类别:
/*
* ch 11 GUI programming questions
* Q 11.12
*/
package Chapter11GUI;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JLabel;
import java.awt.ActiveEvent;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class TempConverter extends JFrame {
//declare instance varibles
JLabel label1;
JLabel label2;
JTextField faherinheit;
//construto constrots GUI and habldes events
public TempConverter() {
super("Temperature Converter");
setLayout(new BorderLayout());
label1 = new JLabel("Eneter ferinheit to convert to celuis: ");
//get usre to enter temp i fioaherinet and trigger event andler to
//assign string to a integer value
//use annomonous class
faherinheit = new JTextField(10);
faherinheit.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//get numbers enetered
int temp = Integer.parseInt(faherinheit.getText());
int celuis = (int) ((5 / 9) * (temp - 32));
label2.setText("Farinheit Temp " + temp + " in celuis is: " + celuis);
}//end actionEvent Listener annmonous classs
});//and eveny handling for textfiel
//add all compnments to JFrame using birder Layout
label2 = new JLabel("Temperature in Celuis is : ");
add(label1, BorderLayout.NORTH);
add(faherinheit, BorderLayout.CENTER);
add(label2, BorderLayout.SOUTH);
}//end constructor
}//end class TempCOnversion
答案 0 :(得分:2)
这里
int celuis = (int) ((5 / 9) * (temp - 32));
5/9
总是被截断为0
我建议更多的内容
int celuis = (int) ((5.0 / 9.0) * ((double)temp - 32.0));
这样,截断不会影响你为坏
或者更好的是,不要使用int来计算温度
答案 1 :(得分:2)
5 / 9
整数除法为零,您应该5.0 / 9
而不是
或者你可以这样做(5 * (temp - 32)) / 9
这样你根本不做双重算术,截断发生在最后
答案 2 :(得分:2)
使用((5.0 / 9.0) * (temp - 32))
进行转化。当您使用(5 / 9)
时,Java编译器将其视为整数,并将结果为零
答案 3 :(得分:1)
默认情况下,如果两个操作数不是double或float类型,则“/”符号表示整数除法。为了确保您收到所需的小数值,要么将一个或两个操作数强制转换为float / double类型,要么生成特定于该类型的操作数,即5.0。
实施例: 5/9 = 0,5.0 / 9 = 0.5555,5 / 9.0 = 0.5555,5.0 / 9.0 = 0.5555,((浮点)5)/ 9 = 0.5555,((双)5)/ 9 = 0.5555,5 /(( float)9)= 0.5555,5 /((double)9)= 0.5555
答案 4 :(得分:0)
这是因为您使用的是int类型:
int celuis = (int) ((5 / 9) * (temp - 32));
所以,5/9
总是0
。
使用double
执行计算:
int celuis = (int) ((5.0 / 9.0) * (temp - 32.0));
答案 5 :(得分:0)
int celuis = (int) ((5 / 9) * (temp - 32));
应使用小数值。解决它的一种方法是:
int celuis = (int) ((5D / 9D) * ((double)temp - 32D));