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";
}
}
添加回答
举报
