这是导致问题的方法.我正在创建一个BMI计算器,它使用年龄,体重和身高来计算最终结果.我不确定我的逻辑是否错误或是否还有其他问题
public void calculateClickHandler(View view) {
String Outcome;
Outcome = null;
age = Float.parseFloat(txtHowOld.getText().toString());
feet = Float.parseFloat(txtFt.getText().toString());
inches = Float.parseFloat(txtIn.getText().toString());
pounds = Float.parseFloat(txtWeight.getText().toString());
height = (feet * 12) + inches;
double BMI1 = (pounds / (height * height)) * 703.0;
if (btnF.isChecked()) {
if (age >= 20 && age <= 40) {
if (BMI1 < 21) {
Outcome = "Underweight";
} else if (BMI1 >= 21 && BMI1 <= 33) {
Outcome = "Healthy";
}
else if (BMI1 > 33 && BMI1 <= 39) {
Outcome = "Overweight";
} else if (BMI1 > 39) {
Outcome = "Obese";
} else if (age >= 41 && age <= 60) {
if (BMI1 < 23) {
Outcome = "Underweight";
} else if (BMI1 >= 23 && BMI1 <= 35) {
Outcome = "Healthy";
} else if (BMI1 > 35 && BMI1 <= 40) {
Outcome = "Overweight";
} else if (BMI1 > 40) {
Outcome = "Obese";
}
} else if (age >= 61 && age <= 79) {
if (BMI1 < 24) {
Outcome = "Underweight";
} else if (BMI1 >= 24 && BMI1 <= 36) {
Outcome = "Healthy";
} else if (BMI1 > 36 && BMI1 <= 42) {
Outcome = "Overweight";
} else if (BMI1 > 42) {
Outcome = "Obese";
}
}
}
if (btnM.isChecked()) {
if (age >= 20 && age <= 40) {
if (BMI1 < 8) {
Outcome = "Underweight";
} else if (BMI1 >= 8 && BMI1 <= 19) {
Outcome = "Healthy";
} else if (BMI1 > 19 && BMI1 <= 25) {
Outcome = "Overweight";
} else if (BMI1 > 25) {
Outcome = "Obese";
}
} else if (age >= 41 && age <= 60) {
if (BMI1 < 11) {
Outcome = "Underweight";
} else if (BMI1 >= 11 && BMI1 <= 22) {
Outcome = "Healthy";
} else if (BMI1 > 22 && BMI1 <= 27) {
Outcome = "Overweight";
} else if (BMI1 > 27) {
Outcome = "Obese";
}
} else if (age >= 61 && age <= 79) {
if (BMI1 < 13) {
Outcome = "Underweight";
} else if (BMI1 >= 14 && BMI1 <= 25) {
Outcome = "Healthy";
} else if (BMI1 > 25 && BMI1 <= 27) {
Outcome = "Overweight";
} else if (BMI1 > 27) {
Outcome = "Obese";
}
}
BMI2.setText(Outcome);
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Bar*_*ett 10
你的逻辑很好.Android Studio(或其他什么?)只是抱怨有太多的分支来计算方法的数字复杂性.
如果您想减轻错误,请创建一个新类来解析BMI值(也许是性别的布尔值或枚举(我假设这是btnM的意思))到一个单独的类或方法中.
---编辑
您可以在下面的代码中看到,通过首先找到适当的边界,然后将边界和BMI1评估为结果来消除冗余范围检查代码.
在制作这些内容的过程中,您还会注意到您的爷爷系列中有一个错误(13/14)并且没有19岁或80岁以上的计算.
public void calculateClickHandler(View view) {
boolean male = btnM.isChecked() && !btnF.isChecked();
age, feet, inches, pounds, BMI1 = whatever;
String outcome = findOutcome(male, BMI1);
// display outcome somewhere
}
static final int[] bmiRangesLady = { 21, 33, 39 };
static final int[] bmiRangesMom = { 23, 35, 40 };
static final int[] bmiRangesGma = { 24, 36, 42 };
static final int[] bmiRangesMan = { 8, 19, 25 };
static final int[] bmiRangesDad = { 11, 22, 27 };
static final int[] bmiRangesGpa = { 13, 25, 30 };
public static String findOutcome(boolean male, double bmi) {
int[] bmiRangesToUse;
if (!male) {
if (age >= 20 && age <= 40) {
bmiRangesToUse = bmiRangesLady;
} else if (age > 40 && age <= 60) {
bmiRangesToUse = bmiRangesMom;
} else if (age > 60) {
bmiRangesToUse = bmiRangesGma;
}
} else {
if (age >= 20 && age <= 40) {
bmiRangesToUse = bmiRangesMan;
} else if (age > 40 && age <= 60) {
bmiRangesToUse = bmiRangesDad;
} else if (age > 60) {
bmiRangesToUse = bmiRangesGpa;
}
}
// if you still get hi complexity, the above code can be moved into another method.
// fge suggests converting the below (or the bmiRanges themselves) into a RangeMap.
if (bmi < bmiRangesToUse[0]) {
outcome = "Underweight";
} else if (bmi >= bmiRangesToUse[0] && bmi <= bmiRangesToUse[1]) {
outcome = "Healthy";
} else if (bmi > bmiRangesToUse[1] && bmi <= bmiRangesToUse[2]) {
outcome = "Overweight";
} else if (bmi > bmiRangesToUse[2]) {
outcome = "Obese";
}
return outcome;
}
Run Code Online (Sandbox Code Playgroud)