华氏度到摄氏度的转换率仅为0.0和-0.0

时间:2011-09-06 20:40:23

标签: 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;
  }
}

在风格方面可能是可怕的,但我只想得到一些通过编译器的工作代码(因此“返回0;”我相当肯定可以以更时尚的方式规避)

我想知道的是,当我在appletviewer或浏览器中测试时,Celsius到Fahrenheit转换工作正常,但华氏温度到摄氏温度转换只产生0.0和-0.0。我不明白什么是错的,因为我设计的部分似乎相当对称。是不是两种转换方法都不起作用?

5 个答案:

答案 0 :(得分:3)

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

和(度 - 32)*(5/9);永远是0,你需要使用双打或其他东西。

答案 1 :(得分:3)

问题似乎是5/9。它们被视为整数,5/9是0.something,0为整数。无论如何* 0 = + -0:)

在数字后放置一个“d”,(5d / 9d)强制编译器将它们视为双倍。

答案 2 :(得分: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;
  }
}

答案 3 :(得分:0)

(5 / 9)更改为(5.0 / 9.0)让java知道您想要实数除法。

答案 4 :(得分:-1)

import java.util.Scanner;
public class HelloWorld {

    public static void main(String[] args) {
        Scanner reader = new Scanner(System.in);  // Reading from System.in

        System.out.println("Enter  the number of Fahrenheit temperatures to convert to Kelvins");
// opts for the user to enter a number 

        int F = reader.nextInt() ; // Scans the next token of the input
        double f = 5/9d;
        System.out.println(f);
        double x = F -32;
        System.out.println(x);
        double K = (f*x)+ 273.0; // the formulae to calculate temperature  in Kelvin
        System.out.println( +F + " Fahrenheit is equal " +K + " Kelvins" ) ;
        reader.close();




    }       

}