Java 如何确定给定各种温度输入的标准化温度?
我需要使用一个标准化的温度值来检查是否有人生病 我已经编写了一个从摄氏度转换为华氏度的函数,但需要使用标准化温度编写相同的函数Java 如何确定给定各种温度输入的标准化温度?,java,normalization,Java,Normalization,我需要使用一个标准化的温度值来检查是否有人生病 我已经编写了一个从摄氏度转换为华氏度的函数,但需要使用标准化温度编写相同的函数 public void hasFever(int temperature1, int temperature2, int temperature3, int temperature4, String bodylocation) throws ArithmeticException, InputMismatchException { final int noOfT
public void hasFever(int temperature1, int temperature2, int temperature3, int temperature4, String bodylocation) throws ArithmeticException, InputMismatchException {
final int noOfTimesTempTaken = 4;
if(bodylocation == "ear") { //Determine if someone has fever if temperature was taken by the ear
final double feverTemperature = 98.6;
double temperature1InFahrenheit = (temperature1 * 9/5) + 32;
double temperature2InFahrenheit = (temperature2 * 9/5) + 32;
double temperature3InFahrenheit = (temperature3 * 9/5) + 32;
double temperature4InFahrenheit = (temperature4 * 9/5) + 32;
double avgTemp = (temperature1InFahrenheit + temperature2InFahrenheit + temperature3InFahrenheit + temperature4InFahrenheit) / noOfTimesTempTaken;
if(avgTemp >= feverTemperature) {
System.out.println("This person has a fever because their temperature of " + avgTemp + " is greater than normal which is 98.6");
} else {
System.out.println("This person does not have a fever because their temperature of " + avgTemp + " is less than normal which is 98.6");
}
}
}
首先,应注意,标准化温度不是一个具有公认/标准含义的术语,在这里不适用。术语normalize有时用于表示“调整以处理测量误差”,但这并不是您在这里想要做的 (必须指出的是,您尚未成功澄清“正常化”的含义,因此我们不得不猜测。根据您所说的,这是我最好的猜测。) 我想你正在寻找这样的东西:
double VALID_FAHRENHEIT_TEMP_THRESHOLD = 60.0; // say
public double normalizeToFahrenheit(double temp) {
if (temp >= VALID_FAHRENHEIT_TEMP_THRESHOLD) {
return temp;
} else {
return temp * (9.0 / 5.0) + 32.0;
}
}
The temperature xy degrees is outside of the expected range for human
temperatures in Fahrenheit.
Options:
1) Accept as a Fahrenheit value.
2) Apply Centigrade to Fahrenheit conversion.
3) Switch device to Centigrade mode.
4) Reenter value.
但问题是,这种“规范化”在科学和数学上都是不合理的。我们假设,如果一个数字小于某个特定值,它必须以摄氏度而不是华氏度为单位。但这并不一定是真的。摄氏度和华氏度都降到很低的值
更实际的是,如果有人溺死在冰冷的水中,他们的体温可能会下降很多。。。可能接近冰点。我们选择的门槛可能会更低。如果我们假设温度“必须”为摄氏度并将其转换,我们报告的温度不正确
一个相关的问题是,奇怪的温度值可能是由于用户未读取温度计、未听到测量值或未键入值造成的;e、 g.11.3
而不是101.3
。对错误输入应用规范化将导致更具误导性的结果
因此,考虑到这种“规范化”方法是无效的,您应该怎么做呢 我的建议是让你的应用程序向用户报告异常情况。例如,向他们显示如下对话框:
double VALID_FAHRENHEIT_TEMP_THRESHOLD = 60.0; // say
public double normalizeToFahrenheit(double temp) {
if (temp >= VALID_FAHRENHEIT_TEMP_THRESHOLD) {
return temp;
} else {
return temp * (9.0 / 5.0) + 32.0;
}
}
The temperature xy degrees is outside of the expected range for human
temperatures in Fahrenheit.
Options:
1) Accept as a Fahrenheit value.
2) Apply Centigrade to Fahrenheit conversion.
3) Switch device to Centigrade mode.
4) Reenter value.
我希望我正确理解你的问题。所以你想把一个通用的温度单位传给你的函数
class Temperature {
private final static double CELSIUS_OFFSET = 273,15;
private final static double FAHRENHEIT_OFFSET = 32;
private final static double FAHRENHEIT_FACTOR = 9.0 / 5.0;
private final double tempInKelvin;
private Temperature() {
//Private constructor, so only this class can access it
}
public static Temperature fromKelvin(double tempInKelvin) {
final Temperature temperature = new Temperature();
temperature.tempInKelvin = tempInKelvin;
return temperature;
}
public static Temperature fromCelsius(double tempInCelsius) {
return fromKelvin(tempInCelsius - CELSIUS_OFFSET);
}
public static Temperature fromFahrenheit(double tempInFahrenheit) {
return fromCelsius((tempInFahrenheit - FAHRENHEIT_OFFSET) / FAHRENHEIT_FACTOR);
}
public double getInKelvin() {
return tempInKelvin;
}
public double getInCelsius() {
return tempInKelvin + CELSIUS_OFFSET;
}
public double getInFahrenheit() {
return getInCelsius()*FAHRENHEIT_FACTOR + FAHRENHEIT_OFFSET;
}
}
使用此类,您可以执行以下操作:
//Example use (has to be in a method, of course):
final Temperature temp1 = Temperature.fromCelsius(39.2);
final Temperature temp2 = Temperature.fromFahrenheit(95.3);
final Temperature temp3 = Temperature.fromCelsius(39.1);
final Temperature temp4 = Temperature.fromCelsius(39.3);
hasFever(temp1, temp2, temp3, temp4, "ear");
//New hasFever() method:
public void hasFever(Temperature temp1, Temperature temp2, Temperature temp3, Temperature temp4, String bodylocation) {
final int noOfTimesTempTaken = 4;
//USE String.equals()!!!
if(bodylocation.equals("ear")) { //Determine if someone has fever if temperature was taken by the ear
final double feverTemperature = 98.6;
double avgTemp = (temp1.getInFahrenheit() + temp2.getInFahrenheit() + temp3.getInFahrenheit() + temp4.getInFahrenheit()) / noOfTimesTempTaken;
if(avgTemp >= feverTemperature) {
System.out.println("This person has a fever because their temperature of " + avgTemp + " is greater than normal which is 98.6");
} else {
System.out.println("This person does not have a fever because their temperature of " + avgTemp + " is less than normal which is 98.6");
}
}
}
现在您有了一个通用的
Temperature
类,它基本上没有可访问的单元,直到您指定了所需的单元。这也可以为您转换所有单位。如果您能告诉我们您的问题到底是什么,我会很高兴。您得到的输出是什么?那么预期的输出是什么呢?您没有任何代码,这些代码可能引发算术异常
或输入不匹配异常
,因此您可以删除引发算术异常、输入不匹配异常
。另外,算术异常
是一种异常,因此不必出现在方法签名中。我的问题在于如何将我的温度变量“转换”为标准化温度,该温度可以根据最低温度进行评估,以确定患者是否生病。可能只有我一个人,但我不知道“标准化”是什么意思“。你能给我解释一下在这种情况下这意味着什么吗?因为温度可以用摄氏度或华氏度来测量(我将摄氏度转换为华氏度的原因),然后再根据发烧温度来评估温度值。我想重构这个函数,以便能够比较钙或华氏温度值(无需从一个单位转换到另一个单位),以确定患者是否生病。