java和赋值中的类成员

时间:2015-04-24 18:39:22

标签: java class

以下是我对程序的怀疑:

    import java.util.Scanner;

    class degrees
    {
    float faren;
    //float cel = (faren-32)*0.55f; doesn work
    void conversion()
    {
        System.out.println("Fahrenheit is "+(faren-32)*0.55f+"Celcius");
        //System.out.println("Fahrenheit is "+cel+"Celcius"); doesnt work
    }
    }

    class Problem4 
    {
    public static void main(String args[])
    {
        degrees deg = new degrees();
        System.out.println("Enter the temperature in Fahrenheit");
        try(Scanner n1 = new Scanner(System.in))
        {
            deg.faren = n1.nextFloat();
        }
        deg.conversion();
    }
   }

所以我发表评论的两个陈述

  float cel = (faren-32)*0.55f;// this one and 
  System.out.println("Fahrenheit is "+cel+"Celcius");//this one

以上陈述都不起作用。我通过调用对象来分配faren的值,但仍然。谁能解释我为什么?

它只是一个简单的程序,所以请不要纠正错误,如果有的话。我需要弄清楚自己。请帮我解决上述两个声明。

2 个答案:

答案 0 :(得分:1)

faren获得值之前,您似乎试图将faren从华氏温度转换为摄氏温度。如果没有给出值,Java会将类变量初始化为0,因此cel将被赋予相当于0华氏度的摄氏度。获得-17.6的原因是(0 - 32) * 0.55f的结果。

不要使用类变量,而是让conversion方法以华氏度为参数,在方法中进行数学计算,然后返回摄氏度值。

此外,conversion并非对目的的描述。您可能希望重命名方法fahrenheitToCelsius或类似的东西。

为了准确,您应该乘以5.0f/9.0f而不是0.55f

答案 1 :(得分:1)

改为使用:

class degrees
    {
    float faren = 0;
    float cel = 0;

    void degrees(float faren)
    {
       this.faren = faren;
       this.cel = (this.faren-32)*5.0f/9.0f;
    }
    void conversion()
    {
        //System.out.println("Fahrenheit is "+(this.faren-32)*0.55f+"Celcius");
        System.out.println("Fahrenheit is "+this.cel+"Celcius");
    }
    }

像这样使用:

var deg = new degrees(farheneitValueHere);
deg.conversion();

float cel = (faren-32)*0.55f;不起作用,因为在使用表达式定义时(尤其是包含其他属性的表达式),您无法初始化属性。此System.out.println("Fahrenheit is "+cel+"Celcius");不起作用,因为cel尚未定义/转换(由第一个原因)。初始化构造函数中的值(如上例所示)