2011-09-06 85 views
4

我在我的Java方法書的第8章(方法,構造函數和字段),我遇到了一個練習題。華氏溫度到攝氏溫度的轉換效率只有0.0和-0.0

所提供的代碼Temperature.java

import java.awt.*; 
    import java.awt.event.*; 
    import javax.swing.*; 
    import java.text.DecimalFormat; 

    public class Temperature extends JApplet 
    implements ActionListener { 
     private JTextField displayF, displayC; 
     private static DecimalFormat displayFormat = new DecimalFormat("0.0"); 

     public void init() { 
      Container c = getContentPane(); 
      c.setBackground(Color.white); 
      c.setLayout(new GridLayout(2, 2, 10, 0)); 

      c.add(new JLabel(" Fahrenheit:")); 
      c.add(new JLabel(" Celsius:")); 

      displayF = new JTextField(6); 
      displayF.setBackground(Color.yellow); 
      displayF.addActionListener(this); 
      c.add(displayF); 

      displayC = new JTextField(6); 
      displayC.setBackground(Color.yellow); 
      displayC.addActionListener(this); 
      c.add(displayC); 
     } 

     public void actionPerformed(ActionEvent e) { 
      String s; 
      double degrees; 
      FCConverter fc = new FCConverter(); 

      if ((JTextField) e.getSource() == displayF) { 
       s = displayF.getText().trim(); 
       degrees = Double.parseDouble(s); 
       fc.setFahrenheit(degrees); 
       degrees = fc.getCelsius(); 
       displayC.setText(displayFormat.format(degrees)); 
      } else { 
       s = displayC.getText().trim(); 
       degrees = Double.parseDouble(s); 
       fc.setCelsius(degrees); 
       degrees = fc.getFahrenheit(); 
       displayF.setText(displayFormat.format(degrees)); 
      } 
     } 
    } 

從那裏我應該編寫和測試FCConverter.java 我想出:

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.text.DecimalFormat; 

public class FCConverter 
{ 
    private double Celsius; 
    private double Fahrenheit; 
    public double setFahrenheit (double degrees) 
    { 
     Celsius = (degrees - 32) * (5/9); 
     return 0; 
    } 
    public double getCelsius() 
    { 
     return Celsius; 
    } 
    public double setCelsius (double degrees) 
    { 
    Fahrenheit = (degrees * 9/5 + 32); 
      return 0; 
    } 
    public double getFahrenheit() 
    { 
     return Fahrenheit; 
    } 
} 

這也可能是可怕的在風格方面,但我只想得到一些通過編譯器的工作代碼(因此我相當確定的「return 0;」可以以更時髦的方式繞過)。

我想知道的是,當我在appletviewer或瀏覽器窗體中測試時,攝氏溫度到華氏溫度的轉換工作正常,但華氏轉換爲攝氏溫度只產生0.0和-0.0。由於我設計的部分看起來相當對稱,因此我不明白髮生了什麼問題。難道兩種轉換方法或兩種轉換方法都不適用?

+2

與您的問題無關 - 其​​他人已回答 - 但只是一個提示。在Java中,以小寫字母開頭的變量名稱是個好習慣 - 所以你的變量應該是'Celsius'和'farenheit',而不是'Celsius'和'Farenheit'。類名以大寫字母開頭。 – Russell

+2

另外,如果你不需要你的方法返回任何東西 - 例如你的setter方法 - 使它們的返回類型爲「void」。然後你不需要在最後粘上一個虛假的'return 0;'。這是'時尚'的方法;-) – Russell

回答

3

在整數運算(5/9)= 0。

和(度 - 32)*(5/9);將永遠是0,你需要使用雙打或什麼的。

3

問題似乎是5/9。它們被看作是一個整數,5/9是0.作爲整數的0。所以無論* 0 = + -0 :)

在數字後加上「d」,(5d/9d)迫使編譯器認爲它們是雙精度。

+0

謝謝! Darn截斷整數>:[ –

0

如果您不返回任何內容,則返回類型設置爲void。如果你想返回雙打,你必須在計算中使用雙打。 5/9總是爲零,因爲5和9是整數。 5.0/9.0是雙打上的不同計算。

import java.awt.*; 
import java.awt.event.*; 
import javax.swing.*; 
import java.text.DecimalFormat; 

public class FCConverter 
{ 
    private double Celsius; 
    private double Fahrenheit; 
    public void setFahrenheit (double degrees) 
    { 
    Celsius = (degrees - 32.0) * (5.0/9.0); 
    } 
    public double getCelsius() 
    { 
     return Celsius; 
    } 
    public void setCelsius (double degrees) 
    { 
     Fahrenheit = (degrees * 9.0/5.0 + 32.0); 
    } 
    public double getFahrenheit() 
    { 
     return Fahrenheit; 
    } 
} 
0

變化(5/9)(5.0/9.0),以使Java知道,要實數師。

相關問題