return 同一个变量的两个get方法

Two get methods that return same variable

我的第一个 get 方法应该 return 根据 BMI 判断某人体重过轻、体重正常、超重还是肥胖。

第二个 get 方法,我希望,会 return 来自第一个 get 方法的相同变量 'category'(所以无论答案是什么,体重不足,正常体重等等),没有当我在 main 方法中调用它时需要在括号中输入一个双精度数。

只是一些背景知识,我在 main 中创建了人物对象并为他们提供了信息(姓名、身高、体重、BMI、类别),然后将所有这些人放在一个数组列表中。这就是我打电话的地方。

我可以调用除我的类别之外的所有内容,returns 'null'。我假设它是因为我的第二个 get 方法没有分配任何数据。但是我不知道如何将它从上面的 get 方法获取到 return 变量,或者如果这不是正确的方法,我应该考虑其他方法。

如有任何帮助或建议,我们将不胜感激。如果有什么不明白或您需要更多代码,请告诉我。

    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;
}

我的数组列表与我的人员对象信息,在 main..

            ArrayList<Person> allInfo = new ArrayList<Person>();
    {
        allInfo.add(andrewsInfo);
        allInfo.add(boydsInfo);
        allInfo.add(cathysInfo);
        allInfo.add(donnasInfo);
    }

只是为了看看它是否有效,我打印了它...

    System.out.println(allInfo.get(0).getCategory());

返回'null'

为了return类别,该方法需要知道BMI。如果您在第二个方法之前调用第一个方法,那么您已经提供了 BMI。但是如果你先调用第二个方法,它就无从知晓了。

一般来说,使用更改对象状态的 get 方法被认为是一种不好的形式。您可能会考虑使用 setBMI(double bmi) 方法来存储 BMI,并可能同时计算类别。调用此方法后,不带参数的 getCategory() 方法就可以使用了。

在您的代码中使用此代码段而不是

public String getCategory()
   {
       return category;
   }

修改后的代码--->

public String getCategory() {
this(bmi);
}

我能看到两个问题。

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

  2. 您有一个重载方法 -- String getCategory() 可能是 returns this.category,并且您已经显示了 getCategory(double bmi)

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

您应该将 BMI 作为 double 值存储在 Person class 中(如果您还没有),然后您可以定义您的个人 class(大致)像这样

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

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

的字段

因此,对象 andrewsInfo, boydsInfo etc 将包含其不同的值。

然后在Person class中你可以有方法

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;
}