3 回答

TA貢獻1772條經驗 獲得超5個贊
bmi
中找不到toString()
。嘗試這個,
public String toString(){ return name + " is " + height + "m tall and is " + weight + "Kg and has a BMI of " + getBMI() + "Kg/m^2"; }

TA貢獻1830條經驗 獲得超3個贊
您在方法中聲明的變量只能在同一方法中使用,不能在該方法之外的任何地方使用,這個概念稱為scope. {要以最簡單的方式理解這一點,請嘗試在您聲明變量的地方找到最近的“開括號” 。并且您可以在括號關閉之前的任何地方使用該變量。
在您的情況下,您已經在方法內部聲明了bmi變量getBMI(),因此您可以在同一方法中的任何地方使用該變量,但在它之外的任何地方都不能使用該變量,并且您嘗試在toString()無法訪問它的方法中使用它,因此您得到了錯誤
cannot resolve symbol bmi
要解決此問題,您可以使用以下兩種方法中的任何一種
1] 調用中的getBMI()方法toString() 我會推薦這種方法,因為getBMI()它返回雙精度,所以讓我們利用它并在需要使用的值的任何地方直接調用它bmi。
@Override
public String toString(){
return name + " is " + height + "m tall and is " + weight + "Kg and has a BMI of " + getBMI() + "Kg/m^2";
}
更新
根據保羅的建議
2] 在這個場景中不推薦,但是你可以在很多其他場景中使用它,bmi在BMI類中定義全局變量,稍后當你在構造函數中為它賦值時,你可以在同一個類中的任何地方使用該變量,你可以在構造函數本身中應用公式。在這種情況下,您的代碼將如下所示
public class BMI {
private double height;
private double weight;
private String name;
private double bmi;
public BMI(String name, double height, double weight) {
this.name = name;
this.height = height;
this.weight = weight;
this.bmi = weight / (height * height);
}
@Override
public String toString() {
return name + " is " + height + "m tall and is " + weight + "Kg and has a BMI of " + bmi + "Kg/m^2";
}
}

TA貢獻1966條經驗 獲得超4個贊
另一種方法是
public class BMI {
private double height;
private double weight;
private String name;
private double bmi;
public BMI(String name, double height, double weight){
this.name = name;
this.height = height;
this.weight = weight;
this.bmi = weight/(height*height);
}
public double getBMI(){
return bmi;
}
@Override
public String toString(){
return name + " is " + height + "m tall and is " + weight + "Kg and has a BMI of " + bmi + "Kg/m^2";
}
}
添加回答
舉報