![](/img/trans.png)
[英]How do I perform a binarysearch on one field of a List that is another class?
[英]How can I do temperature conversion in a class with only one field?
温度主要以三种单位测量:摄氏度、华氏度和开尔文。 很容易将它们中的任何一个转换为另外两个:
Kelvin to Celsius: C = K - 273.15 Celsius to Kelvin: K = C + 273.15 Kelvin to Fahrenheit: F = 9./5*(K - 273.15) + 32 Fahrenheit to Kelvin: K = 5./9*(F - 32) + 273.15 Celsius to Fahrenheit: F = 9./5*C + 32 Fahrenheit to Celsius: C = 5./9*(F - 32)
用一个(而且只有一个!)
double
类型的私有字段编写类Temperature
; 该类的对象描述温度。 该类有一个构造函数和三个方法:
Temperature(double tm, char unit)
— 构造函数获取温度(作为double
)和所用单位的符号:“C”代表摄氏度,“F”代表华氏度,“K”代表开尔文;返回对象表示的温度的三种方法(“getter”),但单位不同:
public double getInC() public double getInF() public double getInK()
如果我们没有 char 类型的字段并且我们无法将任何参数放入函数中,我真的不明白该怎么做,如何解决?
以下是我到目前为止所拥有的。 显然还达不到要求。
public class Temperature {
private final double tm;
public Temperature(double tm, char unit) {
this.tm = tm;
}
public double getInC(){
}
public double getInF(){
}
public double getInK(){
}
}
只需为单位创建一个字段,然后您就拥有了进行转换所需的所有信息:
public class Temperature {
private final double tm;
private final char unit;
public Temperature(double tm, char unit) {
this.tm = tm;
this.unit = unit;
}
public double getInC() {
// TODO: conversion
}
public double getInF() {
// TODO: conversion
}
public double getInK() {
// TODO: conversion
}
@Override
public String toString() {
return tm + "" + unit;
}
}
顺便说一句,您在这里拥有的称为“值对象”,建议添加一个toString()
方法,以便您可以根据需要打印温度(稍后还添加equals
和hashcode
方法以按值比较实例)。
如果您不想添加字段,则替代解决方案:将构造函数中给定的温度转换为内部单位(建议:以 K 为单位),然后从 Kelvin 转换为请求的温度。
这是“替代解决方案”的示例:
public class Temperature {
private double value = 0d;
Temperature(double value, char unit) {
this.value = value;
switch (unit) {
case 'C':
this.value = value;
break;
case 'K':
this.value = value - 273.15;
break;
case 'F':
this.value = 5.0 / 9 * (value - 32);
break;
}
System.out.println("Temperature is " + value + "°" + unit);
}
double getInC() {
return value;
}
double getInF() {
return 9.0 / 5 * value + 32;
}
double getInK() {
return value + 273.15;
}
public static void main(String[] args) {
Temperature test = new Temperature(42, 'C');
System.out.println("\t" + test.getInC() + "°C");
System.out.println("\t" + test.getInK() + "°K");
System.out.println("\t" + test.getInF() + "°F");
test = new Temperature(42, 'K');
System.out.println("\t" + test.getInC() + "°C");
System.out.println("\t" + test.getInK() + "°K");
System.out.println("\t" + test.getInF() + "°F");
test = new Temperature(42, 'F');
System.out.println("\t" + test.getInC() + "°C");
System.out.println("\t" + test.getInK() + "°K");
System.out.println("\t" + test.getInF() + "°F");
}
希望能帮助到你
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.