首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >温度计类逻辑误差

温度计类逻辑误差
EN

Stack Overflow用户
提问于 2017-11-17 20:28:13
回答 2查看 141关注 0票数 0

我正在尝试创建一个类,它有一个构造函数,它接受温度(以摄氏度为单位)为双值,如果温度低于-273.15,它将其设置为-273.15。它还计算不同测量单位的其他温度,但这并不重要。出于某种原因,我得到了一个逻辑错误,它不能纠正小于-273.15到-273.15的输入。

代码语言:javascript
复制
public class TemperatureC
{


private double temperature;


public TemperatureC(double c)
{
    if (temperature < -273.15)
    {
        temperature = -273.15;
    }
    else
    {
        temperature = c;
    }
}

public TemperatureC()
{
    temperature = -273.15;
}

public double getC()
{
    return temperature;
}

public double getF()
{
    return ((temperature * 1.8) + 32);
}

public double getK()
{
    return (temperature + 273.15);
}

public void setC(double c)
{
    if (temperature >= -273.15)
    {
        temperature = c;
    }

}

}

这就是使用这个课程的方法。

代码语言:javascript
复制
import java.util.Scanner;

public class TemperatureTester
{
public static void main(String[] args)
{
Scanner thermometer = new Scanner(System.in);
TemperatureC temp = new TemperatureC();

System.out.printf("Please enter the initial temperature:");
double intialTemp = thermometer.nextDouble();
temp.setC(intialTemp);

System.out.println("The current temperature in Celsius is:" + temp.getC());
System.out.println("The current temperature in Fahrenheit is:" + temp.getF());
System.out.println("The current temperature in Kelvin is:" + temp.getK());

System.out.printf("Please enter a new temperature:");
double secondTemp = thermometer.nextDouble();
temp.setC(secondTemp);

System.out.println("The current temperature in Celsius is:"+ temp.getC());
System.out.println("The current temperature in Fahrenheit is:"+ temp.getF());
System.out.println("The current temperature in Kelvin is:"+ temp.getK());

}
}

这是我的错误输出:

代码语言:javascript
复制
Please enter the initial temperature:-900
The current temperature in Celsius is:-900.0
The current temperature in Fahrenheit is:-1588.0
The current temperature in Kelvin is:-626.85
Please enter a new temperature:-900
The current temperature in Celsius is:-900.0
The current temperature in Fahrenheit is:-1588.0
The current temperature in Kelvin is:-626.85

它应该纠正输入小于-273.15到-273.15。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-11-17 20:33:07

您的问题是正在检查构造函数的默认值。先把温度调到c,或者用c来检查。

代码语言:javascript
复制
public TemperatureC(double c)
{

temperature = c;

if (temperature < -273.15)
{
    temperature = -273.15;
}

这应该是可行的,因为副作用已经不再需要了。

票数 1
EN

Stack Overflow用户

发布于 2017-11-17 20:39:07

您只是在构造函数中检查是否有温带性< -273.15,所以任何时候调用setC都不会更正它。此外,在setC方法中,除非温度是-273.15,否则根本不设置温度。

您可以完全删除构造函数,因为您没有调用它,并更改setC中的逻辑以检查温度< -273.15

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47358770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档