java - 华氏度到摄氏度的转换仅产生 0.0 和 -0.0

标签 java swing applet awt

我正在阅读我的 Java 方法书的第 8 章(方法、构造函数和字段),我的一个练习遇到了问题。

提供的代码是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。我不明白哪里出了问题,因为我设计的部分看起来相当对称。不应该是两种转换方法都起作用或都不起作用的情况吗?

最佳答案

在整数数学中 (5/9) = 0。

和(度数 - 32)*(5/9);将始终为 0,您需要使用 double 或其他东西。

关于java - 华氏度到摄氏度的转换仅产生 0.0 和 -0.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7325882/

相关文章:

java - 为什么不使用 java web start 而不是其他 RIA 框架?

java - 为什么 Java Enumeration 不按顺序返回属性列表?

java - 如何在 Java 中与两(2)个 SwingWorker 类共享数据

java - 我自己的 JButton 首选大小无法正常工作?

java - 将命令行输入传递给处理语言导出的应用程序/小程序?

Java EOFException 服务器/客户端 TCP 应用程序

java - 使用类型化类和 rdf 创建 RDF 模型 :id

java - 小程序运行失败

java - 覆盖 JComboBox 默认颜色

java - 在网页上播放音频流