繁体   English   中英

无法解析Java中的符号

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM