Java-在方法中访问类的实例

问题描述 投票:0回答:2

我必须为接受温度值的类编写代码,将其转换为开尔文,然后确定它是否大于、等于、小于或其他输入的温度。它必须对每种布尔可能性表示 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;
     }
 } 
}
java methods instance
2个回答
0
投票

先编译一下

您发布的代码无法编译,因为您使用的是未知变量,例如此处的

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;
    }
}

0
投票

在这种形式的函数中:

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

© www.soinside.com 2019 - 2024. All rights reserved.