-1

我正在尝试在 JFrame 中运行简单的温度转换。然而,无论华氏温度如何,华氏温度到 celuis(整数)的温度转换返回为零。代码如下,后面是主类:

/*
* 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
4

6 回答 6

2

这里

int celuis = (int) ((5 / 9) * (temp - 32));

5/9总是被截断为 0


我会建议更多类似的东西

int celuis = (int) ((5.0 / 9.0) * ((double)temp - 32.0));

这样,截断不会对您造成不好的影响

或者更好的是,根本不使用 int 来计算温度

于 2013-05-06T20:28:55.537 回答
2

5 / 9整数除法为零,你应该这样5.0 / 9

或者你可以(5 * (temp - 32)) / 9这样做你根本不做双重算术并且截断发生在最后

于 2013-05-06T20:29:08.087 回答
2

用于((5.0 / 9.0) * (temp - 32))转换。当您使用 时(5 / 9),Java 编译器将其视为整数,并给出零作为结果

于 2013-05-06T20:30:04.843 回答
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, ((float)5)/9 = 0.5555, ((double)5)/9 = 0.5555, 5/ ((浮点)9) = 0.5555, 5/((双)9) = 0.5555

于 2013-05-06T20:31:56.250 回答
0

这是因为您使用的是 int 类型:

int celuis = (int) ((5 / 9) * (temp - 32));

所以,5/9总是0

使用 执行计算double

int celuis = (int) ((5.0 / 9.0) * (temp - 32.0));

于 2013-05-06T20:30:52.937 回答
0

int celuis = (int) ((5 / 9) * (temp - 32));应该使用十进制值。修复它的一种方法是: int celuis = (int) ((5D / 9D) * ((double)temp - 32D));

于 2013-05-06T20:31:15.203 回答