Java 返回相同变量的两个get方法

Java 返回相同变量的两个get方法,java,getmethod,Java,Getmethod,我的第一个get方法应该根据体重指数返回某人是体重不足、正常体重、超重还是肥胖 我希望第二个get方法能够从第一个get方法返回相同的变量“category”(因此无论答案是什么,体重不足、正常体重等等),而不需要在主方法中调用时在括号中输入双精度 仅仅是一些背景,我在main中创建了people对象,并给它们提供了信息(姓名、身高、体重、BMI、类别),然后将所有这些人放入一个数组列表中。这就是我打电话的原因 我可以调用除category之外的所有东西,category返回“null”。我假设

我的第一个get方法应该根据体重指数返回某人是体重不足、正常体重、超重还是肥胖

我希望第二个get方法能够从第一个get方法返回相同的变量“category”(因此无论答案是什么,体重不足、正常体重等等),而不需要在主方法中调用时在括号中输入双精度

仅仅是一些背景,我在main中创建了people对象,并给它们提供了信息(姓名、身高、体重、BMI、类别),然后将所有这些人放入一个数组列表中。这就是我打电话的原因

我可以调用除category之外的所有东西,category返回“null”。我假设它是因为我的第二个get方法没有任何数据分配给它。但是我不知道如何让它从上面的get方法返回变量,或者如果这不是正确的方法,我应该考虑其他方法

如有任何帮助或建议,将不胜感激。如果有什么不合理的地方或者你需要更多的代码,请告诉我

    public String getCategory(double bmi) {
    if (bmi < 18.5) {
        category = "UNDERWEIGHT";
    } else if ((bmi > 18.5) && (bmi < 25)) {
        category = "NORMAL WEIGHT";
    } else if ((bmi > 25) && (bmi < 30)) {
        category = "OVERWEIGHT";
    } else if (bmi > 30) {
        category = "OBESE";
    }

    return category;
}

public String getCategory() {
    return category;
}

返回“null”

为了返回类别,方法需要知道BMI。如果在调用第二个方法之前调用第一个方法,那么您已经提供了BMI。但是如果你先调用第二个方法,它就没有办法知道了


一般来说,让get方法改变对象的状态被认为是不好的形式。您可能会考虑使用一个存储BMI的StBMI(双BMI)方法,并可能同时计算类别。调用此函数后,不带参数的getCategory()方法将有一些东西可以使用。

在代码中使用此代码段,而不是

public String getCategory()
   {
       return category;
   }
修改代码--->


我可以看到两个问题

  • 您的if条件未考虑BMI==18.5或25或30

  • 您有一个重载方法--
    String getCategory()
    可能返回您显示的
    this.category
    ,和
    getCategory(double bmi)

  • 您正在调用第一个变体,这并不是必需的。您不需要将
    category
    存储为字段(如果未初始化,则该字段将为空,这就是您正在打印的内容),因为它是基于
    bmi
    值动态计算的

    相反,您应该将BMI存储为
    Person
    类中的
    double
    值(如果您还没有),然后您可以这样(粗略地)定义您的Person类

    创造一个人

    Person cricket_007 = new Person();
    cricket_007.setBmi(20); // Maybe this is right? :)
    
    打印出来

    System.out.println(cricket_007.getCategory()); // NORMAL
    

    您的
    Person
    类应该有一个名为
    bmi

    因此,对象
    andrewsInfo、boydsInfo等
    将包含其不同的值

    然后在
    Person
    类中,您可以使用该方法

    public String getCategory() {
        if (this.bmi <= 18.5) {
            category = "UNDERWEIGHT";
        } else if ((this.bmi > 18.5) && (this.bmi <= 25)) {
            category = "NORMAL WEIGHT";
        } else if ((this.bmi > 25) && (this.bmi <= 30)) {
            category = "OVERWEIGHT";
        } else if (this.bmi > 30) {
            category = "OBESE";
        }
    
        return category;
    }
    
    公共字符串getCategory(){
    如果(本bmi 18.5)和(本bmi 25)和(本bmi 30){
    类别=“肥胖”;
    }
    退货类别;
    }
    
    如果BMI==18.5或25或30怎么办?如果bmi正好为18.5、25或30,则对那些if语句使用正确的条件您没有值。如果你简化了你的代码,你就可以避免你处理的值中的这些漏洞。还有,你有重载的方法吗?你展示的那个值是双倍的,但是你说的打印空值不是我没意识到我漏掉了那些数字,这是我的疏忽,谢谢你抓住了!您错过了return语句,但尽管这可能有效,但它完全不可用我编写的代码是正确的,我们需要一个带bmi参数的方法从无参数构造函数调用。我建议您浏览构造函数类。实际上,不,这是不正确的
    String getCategory
    没有
    return
    很好的解释-比只吐代码要好得多。@Mogsdad-谢谢!我会尽可能经常来这里
    public class Person {
    
        private double bmi;
    
        public void setBmi(double bmi) {
            this.bmi = bmi;
        }
    
        public String getCategory() {
            if (bmi >= 30) {
                return "OBESE";
            } else if (bmi >= 25) {
                return "OVERWEIGHT";
            } else if (bmi >= 18.5) {
                return "NORMAL";
            } else {
                return "UNDERWEIGHT";
            }
        }
    }
    
    Person cricket_007 = new Person();
    cricket_007.setBmi(20); // Maybe this is right? :)
    
    System.out.println(cricket_007.getCategory()); // NORMAL
    
    public String getCategory() {
        if (this.bmi <= 18.5) {
            category = "UNDERWEIGHT";
        } else if ((this.bmi > 18.5) && (this.bmi <= 25)) {
            category = "NORMAL WEIGHT";
        } else if ((this.bmi > 25) && (this.bmi <= 30)) {
            category = "OVERWEIGHT";
        } else if (this.bmi > 30) {
            category = "OBESE";
        }
    
        return category;
    }