-1

I am trying to run a simple temperature conversion in a JFrame . However the temperature conversion of Fahrenheit to celuis (integer) returns as zero regardless of the Fahrenheit temperature. Code is below followed by the main class:

/*
* 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 に答える
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));小数値を使用する必要があります。それを修正する1つの方法は次のとおりです。 int celuis = (int) ((5D / 9D) * ((double)temp - 32D));

于 2013-05-06T20:31:15.203 に答える