我在我的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。由於我設計的部分看起來相當對稱,因此我不明白髮生了什麼問題。難道兩種轉換方法或兩種轉換方法都不適用?
與您的問題無關 - 其他人已回答 - 但只是一個提示。在Java中,以小寫字母開頭的變量名稱是個好習慣 - 所以你的變量應該是'Celsius'和'farenheit',而不是'Celsius'和'Farenheit'。類名以大寫字母開頭。 – Russell
另外,如果你不需要你的方法返回任何東西 - 例如你的setter方法 - 使它們的返回類型爲「void」。然後你不需要在最後粘上一個虛假的'return 0;'。這是'時尚'的方法;-) – Russell