当前位置: 首页 > 知识库问答 >
问题:

用于温度转换器的java basic访问器方法

长孙知
2023-03-14

我的目标是创建一个以摄氏度和华氏度表示温度的类“温度”。该类需要以下组成的四个构造函数。我需要帮忙的部分是两个访问器方法,因为我还不太熟悉它。我写了代码,但不确定它是否可行,我很感激一些洞察力

四个构造函数:1.一个用于度数2.一个用于刻度3.一个用于度数和刻度4.默认构造函数

两种访问器方法:

  1. 一个以摄氏度为单位返回温度
  2. 另一个返回华氏度

w/下面给出的公式C=5(F-32)/9 F=9*C/5 32

从我目前的设置方式来看,我相信我正在朝着只从摄氏度转换到华氏度的方向努力。。。我怎样才能使它可以互换

请不要恨我,我只是个新手,可能会犯致命的错误

package temperatureapparatus;

public class Temperature {

    private float degrees;
    char scale;
    public static final float fahrenheitForm = ((9.0*(degrees/5.0))+32.0);

    public Temperature(){
        degrees = 0;
        scale = 'C';
    }

    public Temperature(float degrees){
        this.degrees = degrees;
        degrees = 0;
    }

    public Temperature(char scale){
        this.scale = scale;
        scale = 'C';          
    }

    public Temperature(float degrees, char scale){
        this.degrees = degrees;
        this.scale = scale;      
    }

    public float getTempCels (float degrees, char scale){
        return degrees;
    }

    public float getTempFehr (float degrees, char scale){
        return fahrenheitForm;
    }                
}

共有3个答案

程毅
2023-03-14

这可能不是你想要的答案,但我认为构造器不应该这样设置。另外,我认为你应该对一个接口进行编程。

而且,java在数字方面有点不稳定。我第一次尝试编译你的代码时,我得到:

 incompatible types: possible lossy conversion from double to float

对于任何使用硬编码转换浮动的东西,直到我输入所有内容。

如果我以不同的方式来做这件事,我会编写某种具有明确定义的访问器方法的接口。对于您当前的构造函数,它是非常不清楚如何使用的,并且在我看来是危险的。

我会设置一个这样的界面:

package temp;

public interface TemperatureInterface
{
        // Sets internal degrees to celcius
        public void setCelcius(float degreesCelcius);
        // Sets internal degrees to fahrenheit
        public void setFahrenheit(float degreesFehrenheit);
        // Gets internal degrees in celcius
        public float getDegreesCelcius();
        // Gets internal degrees in fahrenheit
        public float getDegreesFahrenheit();
}

通过这样的实现:

package temp;

public class Temperature 
        implements TemperatureInterface 
{
        private boolean temperatureSet;
        private float celciusInternal;
        private float _convertToCelcius(float degreesFehrenheit)
        {   
                return (((float)9.0*((float)degreesFehrenheit/(float)5.0))+(float)32.0); 
        }   
        private float _convertToFehrenheit(float degreesCelcius)
        {   
                return (((float)degreesCelcius*(float)1.8)+(float)32.0); 
        }   
        public Temperature() {
                this.temperatureSet = false;
        }   
        // Sets internal degrees to celcius
        public void setCelcius(float degreesCelcius)
        {   
                this.temperatureSet = true;
                // We need to set the internal
                // degrees in celcius, so just
                // set it.
                this.celciusInternal = degreesCelcius;
        }   
        // Sets internal degrees to fahrenheit
        public void setFahrenheit(float degreesFehrenheit)
        {   
                this.temperatureSet = true;
                // We need to set the internal
                // degrees in celcius, so first 
                // convert it.
                float degreesCelcius = this._convertToCelcius(degreesFehrenheit);
                this.celciusInternal = degreesCelcius; 
        }   
        // Gets internal degrees in celcius
        public float getDegreesCelcius()
        {   
                // First make sure the temperature
                // has been set.
                if (this.temperatureSet == false) {
                        System.out.println("Error: no temperature set.");
                        System.exit(1);
                }   
                // We already have degrees celcius,
                // so just give the value back.
                return this.celciusInternal;
        }  
        // Gets internal degrees in fahrenheit
        public float getDegreesFahrenheit()
        {   
                // First make sure the temperature
                // has been set.
                if (this.temperatureSet == false) {
                        System.out.println("Error: no temperature set.");
                        System.exit(1);
                }   
                // First we have to convert the
                // internal degrees celcius.
                float celcius = this._convertToFehrenheit(this.celciusInternal);
                return celcius;
        }
}

请注意,我首先编写了接口,您只需要知道该接口就可以知道如何使用该类。通常我会抛出异常,而不是系统。欧点。println(“错误的东西”),但它现在几乎无关紧要。

不管怎样,这可能对你的家庭作业问题没有帮助,但我认为这样的课程应该这样写。

谭鹏云
2023-03-14

您需要将farenheitForm移动到accessor方法中。如果它是一个私有字段,则只有在构建类并保持在32时才会初始化它。

public float getTempFehr (float degrees, char scale){
    return (9 * degrees / 5f) + 32;
}

从我目前的设置方式来看,我相信我正在朝着只从摄氏度转换到华氏度的方向努力。。。我怎样才能使它可以互换

如果你想用degrees或farenheit来稳定这个类,你应该修改你的第二个构造函数,使其带有一个标志,表示传入的度量;或者创建另一个构造函数,使用double参数而不是float来表示farenheit形式。进入构造函数后,可以将farenheit值转换为degrees值,并将其存储在private字段中。

public Temperature(double farenheit){
    degrees = 5 * (farenheit - 32) / 9;
}

在这一点上,添加另一个构造函数来获取华氏值和标度也是值得的——以与等效度构造函数保持一致。

张华池
2023-03-14

下面是代码的正确版本。但我不明白为什么你有实例变量,因为你从来没有使用过它们。在你的例子中,构造器也是无关的。对于优雅的代码,您可以遵循Alexander Kleinhans的编码实现,也可以将转换方法(即getTempCels和getTempFehr)标记为静态,并且不必创建实例来使用这些方法。您可以查看此链接以了解静态方法和非静态方法。

public class Temperature {

    private float degrees;
    char scale;


    public Temperature(){
        degrees = 0;
        scale = 'C';
    }
    public Temperature(float degrees){
        this.degrees = degrees;
        scale = 'C';
    }

    public Temperature(char scale){
        // change the given scale to uppercase
        scale = Character.toUpperCase(scale);
        this.scale = 'C';
        // if the given scale is 'F' then change the instance variable scale (this.scale) to scale passed in parameter
        if(scale == 'F'){
            this.scale = scale;
        }
        this.degrees = 0;

    }
    public Temperature(float degrees, char scale){
        scale = Character.toUpperCase(scale);
        this.scale = 'C';
        if(scale == 'F'){
            this.scale = scale;
        }
        //set instance variable degrees (this.degrees) to the degrees passed in parameter
        this.degrees = degrees;  
    }

    public float getTempCels (float degrees, char scale){
        scale = Character.toUpperCase(scale);

        // if the given scale is celsius then just return whatever was passed in parameter
        if(scale == 'C'){
            return degrees;
        }

        // else if the given scale is fahrenheit then use the formula to convert to celsius and return the result
        else if(scale == 'F'){
            return ((degrees - 32.0f) * (5.0f/9.0f));
        }

        // if the given scale is anything else than celsius or fahrenheit then print a message and return zero.
        else{
            System.out.println("Invalid scale. Try again with scale either C (for celsius) or F (for fahrenheit)"); 
            return 0;
        }
    }

    public float getTempFehr (float degrees, char scale){
        scale = Character.toUpperCase(scale);

        //if the given scale is fahrenheit then just return whatever was passed in parameter
        if(scale == 'F'){
            return degrees;
        }

        // else if the given scale is celsius then use the formula to convert to fahrenheit and return the result
        else if (scale == 'C'){
            return ((9.0f*(degrees/5.0f))+32.0f);
        }

        // if the given scale is anything else than celsius or fahrenheit then print a message and return zero.
        else{
            System.out.println("Invalid scale. Try again with scale either C (for celsius) or F (for fahrenheit)"); 
            return 0;
        }
    }

}
 类似资料:
  • 我正在做一个项目,需要我使用TinkerKit热敏电阻传感器来获得室温。检测后,Arduino BT板必须通过蓝牙将串行数据发送回Android手机。温度需要在Celcius的手机屏幕上显示。 我已经使串行通信链接工作。但热敏电阻的读数似乎很奇怪。它的读数是173/174/175,但我不确定它的读数是华氏度还是摄氏度(因为我找不到任何数据表和热敏电阻读数装置的详细信息)。 我必须包括任何带数值的温

  • 我对Java还是个新手,在理解OOP方面更是新手,所以请不要取笑我的不理解。 我试图设计一个程序,让用户输入华氏或摄氏度的温度,然后程序将确定另一个测量中的温度。 有没有人能给我一些建议,告诉我我的方向是否正确? 这是我到目前为止所做的,请记住,这是我对OOP的第一次尝试,所以它可能看起来一团糟。

  • 我正在做关于java编程的小练习。 基本上,该应用程序允许用户输入华氏温度并显示摄氏当量,或输入摄氏温度并显示华氏当量。该应用程序包括一个摄氏度方法,返回相当于华氏温度的摄氏度。该应用程序还包括一个华氏度方法,该方法返回相当于摄氏度的华氏度。 以下是我的完整代码: 好消息是包括方法在内的代码正在工作。用户可以输入选择1或2,然后输入温度数字并以摄氏度或华氏度显示。但如果用户输入选择3,程序将显示“

  • 本文向大家介绍python实现简单温度转换的方法,包括了python实现简单温度转换的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了python实现简单温度转换的方法。分享给大家供大家参考。具体分析如下: 这是一段简单的python代码,用户转换不同单位的温度,适合初学者参考 希望本文所述对大家的Python程序设计有所帮助。

  • 检测物体的温度。 用法 Your browser does not support the video tag. 案例:温度计 说明:通过将温度传感器检测到的温度值转化为舵机转动的角度值,来展示度数。 所需模块:智能电源、温度传感器、双舵机驱动、舵机。

  • 温度传感器模块用于检测水、人体等物体的温度。 净重量:13.7g 体积:24×24×14mm 参数 工作电压:5V 测量范围:-55℃~125℃ 测量精度:±0.5℃(-10℃~85℃) 工作电压:DC 5V 抗跌落能力:1.5m 工作温度(模块):-10℃~55℃ 工作湿度:<95%" 特点 高灵敏度 注意事项 测量温度超过100℃时, 传感器线材可能会损坏。请小心使用以免受损坏设备。