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);
}
我能看到两个问题。
您的 if 条件未考虑 BMI == 18.5 或 25 或 30
您有一个重载方法 -- 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;
}
我的第一个 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);
}
我能看到两个问题。
您的 if 条件未考虑 BMI == 18.5 或 25 或 30
您有一个重载方法 --
String getCategory()
可能是 returnsthis.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;
}