2

イベントハンドラーで何が間違っているのかわかりません。私は良いプログラマーではありません。摂氏から華氏への変換はできますが、その逆はできません。通常、華氏から摂氏への変換では 0.0 が表示されます。摂氏または華氏を選択するための JComboBox であるcfListと関係があるのではないかと思います。

また、値を入力せずに変換ボタンをクリックできるようにしたいと考えています。JTextField は自動的にゼロに設定され、「値がゼロに設定されました」というメッセージが表示されます。

では、どうすればこの全体を機能させることができますか:

  • 摂氏を華氏に変換する
  • 華氏を摂氏に変換する
  • 値なしで摂氏を華氏に変換します(ゼロに設定)
  • 値なしで華氏を摂氏に変換します(ゼロに設定)

    class TCalcButtonHandler implements ActionListener { 
         public void actionPerformed(ActionEvent e) {
             double far, cel;
             String ff, cc;
             String inString;
    
             inString = tempField.getText();
             if(inString==null && cfList.getSelectedIndex() == 0)
             {
                 degree.setText("F");
                 cel=0;
                 far = cel*(9/5)+32;
                 ff = far+"";
                 resultField.setText(ff);
                 tempSysField.setText("Value set to zero");
             }
             if(inString==null && cfList.getSelectedIndex() == 1)
             {
                 degree.setText("C");
                 far=0;
                 cel = (5/9)*(far-32);
                 cc = cel+"";
                 resultField.setText(cc);
                 tempSysField.setText("Value set to zero");
             }
             if(cfList.getSelectedIndex()==0 && inString!=null)
             {
                 degree.setText("F");
                 cel = Double.parseDouble(inString);
                 far = cel*(9/5)+32;
                 ff = far+"";
                 resultField.setText(ff);
                 tempSysField.setText("");
             }
             if(cfList.getSelectedIndex()==1 && inString!=null)
             {
                 degree.setText("C");
                 far = Double.parseDouble(inString);
                 cel = (far-32)*(5/9);
                 cc = cel+"";
                 resultField.setText(cc);
                 tempSysField.setText("");
             }
         }
     } 
    
4

1 に答える 1

4

あなたの質問のタイトルは次のように述べています:

温度変換がうまくいかない...

ほとんどの場合、これは無意識のうちに int 除算を行っていることが原因であり、実際、それがまさに起こっていることです。

far = cel*(9/5)+32;

9/5 を 9.0/5.0 に変更

far = cel * (9.0 / 5.0) + 32;

何でこれが大切ですか?int 除算 (ある int を別の int で除算する) は、小数部分を切り捨てた int を常に返します。したがって、9/5 は 1 を返し、5/9 は 0 を返します。計算で小数部分を保持する場合は、少なくとも 1 つの double が除算式の一部である必要があるため、実際には 9.0 / 5 は問題なく機能します。((double)9/5)

于 2013-11-10T04:31:54.173 に答える