[英]Cannot resolve symbol in Java
我正在学习Java,并尝试编写一个对象来计算人体的BMI。 但是有一个错误说不能在最后一个返回中解析符号bmi
。
想知道为什么不能使用在getBMI()
返回的bmi
,以及应该如何解决类似的问题。
对于另一个问题,我的代码中是否有其他多余或缺少的东西?
public class BMI {
private double height;
private double weight;
private String name;
public BMI(String name, double height, double weight){
this.name = name;
this.height = height;
this.weight = weight;
}
public double getBMI(){
double bmi = weight/(height*height);
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";
}
}
在toString()
找不到bmi
。 尝试这个,
public String toString(){
return name + " is " + height + "m tall and is " + weight + "Kg and has a BMI of " + getBMI() + "Kg/m^2";
}
您在方法中声明的变量只能在同一方法中使用,不能在该方法之外的任何地方使用它,这个概念称为scope
。 要以最简单的方式理解这一点,请尝试在声明该变量的位置找到最近的上行“开括号” {
。 并且您可以在该括号关闭之前的任何地方使用该变量。
在您的情况下,您已经在getBMI()
方法中声明了bmi
变量,因此您可以在同一方法中的任何地方使用该变量,但不能在该方法之外的任何地方使用它,并且您尝试在toString()
方法中使用它,在该方法中您无法访问它,所以你得到一个错误
cannot resolve symbol bmi
要解决此问题,您可以使用以下两个方法中的任何一个
1]在toString()
调用getBMI()
方法,我将推荐这种方法,因为getBMI()
返回的是double,因此请利用它,并在需要使用bmi
值的任何地方直接调用它。
@Override
public String toString(){
return name + " is " + height + "m tall and is " + weight + "Kg and has a BMI of " + getBMI() + "Kg/m^2";
}
UPDATE
根据保罗的建议
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";
}
}
另一种方法是
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";
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.