-1

我的第一个 get 方法应该根据他们的 BMI 返回某人是否体重过轻、正常体重、超重或肥胖。

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

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

我可以调用除我的类别之外的所有内容,它返回“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;
}

我的数组列表与我的人员对象信息,主要..

            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());

返回“空”

4

4 回答 4

2

我可以看到两个问题。

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

  2. 你有一个重载的方法——String getCategory()可能会返回this.category,并且getCategory(double bmi)你已经展示了。

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

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

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
于 2016-02-10T02:53:24.393 回答
1

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

通常,拥有改变对象状态的 get 方法被认为是不好的形式。您可能会考虑使用 setBMI(double bmi) 方法来存储 BMI,并可能同时计算类别。调用它之后,没有参数的 getCategory() 方法就可以使用了。

于 2016-02-10T02:48:36.903 回答
0

你的Person班级应该有一个名为bmi

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

然后在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;
}
于 2016-02-10T02:53:56.780 回答
-2

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

public String getCategory()
   {
       return category;
   }

修改代码--->

public String getCategory() {
this(bmi);
}
于 2016-02-10T02:51:01.467 回答