我必须为接受温度值的类编写代码,将其转换为开尔文,然后确定它是否大于、等于、小于或其他输入的温度。它必须对每种布尔可能性表示 true 或 false。我无法让它将设置为 t1 的温度与布尔方法作为参数的温度 t 进行比较?有什么建议么?另外,不要再对我投反对票,我知道我不知道自己在做什么,这就是我问这个问题的原因。我上周开始学习Java,我知道我不擅长吗?
public class Temperature {
public double degrees;
public static void main(String[] args) {
}
Temperature (){
degrees=0;
}
Temperature (double enteredtemp){
degrees = enteredtemp;
}
Temperature (double enteredtemp,char scale ){
Temperature t1 = new Temperature (enteredtemp, scale);
t1.set(enteredtemp,scale);
}
public void set (double enteredtemp, char scale){
if (scale == 'r'|| scale == 'R'){ degrees = (enteredtemp/(9/5));}
else if (scale == 'c'|| scale == 'C') {degrees = enteredtemp+273.15;}
else if (scale =='F'|| scale == 'f'){degrees = ((enteredtemp+459.67)*9/5);}
}
public double get(){
return degrees;
}
public double get(char scale){
if (scale == 'c'|| scale == 'C'){degrees = (degrees-273.15);}
else if (scale == 'r'||scale == 'R'){degrees = (degrees*(9/5));}
else if (scale == 'f'|| scale == 'F'){degrees = (degrees*(9/5)-459.67);}
return (degrees);
}
public boolean isLessThan(Temperature t){
if (t.get() < t1.get())
return true;
else {
return false;
}
}
public boolean isGreaterThan(Temperature t){
if (t.get() > t1.get()) {
return true;
}
else {
return false;
}
}
public boolean isEqual(Temperature t){
if ((Math.abs(t.get() - t1.get()))<=10E-12){
return true;
}
else {
return false;
}
}
public boolean isGreaterThanOrEqual(Temperature t){
if (t.get() >= t1.get()){
return true;
}
else {
return false;
}
}
public boolean isLessThanorEqual(Temperature t){
if (t.get() <= t1.get()){
return true;
}
else {
return false;
}
}
}
您发布的代码无法编译,因为您使用的是未知变量,例如此处的
t1
:
public boolean isGreaterThan(Temperature t){ if (t.get()>t1.get()) {return true;} else {return false;} }
您想将
t1.
放在那里。
get
使用名为
get
的方法来更改类的字段是违反直觉的,也是一种不好的做法。所以代替这个:
public double get(char scale) { if (scale == 'c' || scale == 'C') { degrees = (degrees - 273.15); } else if (scale == 'r' || scale == 'R') { degrees = (degrees * (9 / 5)); } else if (scale == 'f' || scale == 'F') { degrees = (degrees * (9 / 5) - 459.67); } return (degrees); }
像这样重写:
public double get(char scale) {
if (scale == 'c' || scale == 'C') {
return degrees - 273.15;
} else if (scale == 'r' || scale == 'R') {
return degrees * 9 / 5;
} else if (scale == 'f' || scale == 'F') {
return degrees * 9 / 5 - 459.67;
}
return degrees;
}
我还删除了不必要的括号。
此外,你的大多数方法都可以大大简化,例如:
public boolean isLessThan(Temperature t) {
return get() < t.get();
}
public boolean isGreaterThan(Temperature t) {
return get() > t.get();
}
public boolean isEqual(Temperature t) {
return Math.abs(t.get() - get()) <= 10E-12;
}
public boolean isGreaterThanOrEqual(Temperature t) {
return get() >= t.get();
}
public boolean isLessThanOrEqual(Temperature t) {
return get() <= t.get();
}
(我知道你称赞你的教授“不喜欢”
switch
(他错了),但无论如何还是留下这个供你参考。)
我还建议像这样重写
set
:
public void set(double enteredtemp, char scale) {
switch (scale) {
case 'r':
case 'R':
degrees = (enteredtemp / (9 / 5));
break;
case 'c':
case 'C':
degrees = enteredtemp + 273.15;
break;
case 'f':
case 'F':
degrees = ((enteredtemp + 459.67) * 9 / 5);
break;
}
}
在这种形式的函数中:
public boolean isGreaterThan(Temperature t){
if (t.get()>t1.get()) {return true;}
else {return false;}
}
您正在将
t
与不存在的 t1
进行比较。您想要将当前对象 (this
) 与您传递的参数 t
进行比较。您也可以直接返回比较结果,而不是使用 if
语句。
public boolean isGreaterThan(Temperature t){
return this.get() > t.get();
}
另请注意,在带有两个参数的构造函数中,您根本没有设置对象属性:您正在创建一个新的
t1
,设置其属性,然后丢弃它。打电话给 this.set
而不是 t1.set
。