gpt4 book ai didi

java - Error Method太复杂,数据流算法无法分析

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:31 48 4
gpt4 key购买 nike

这是导致问题的方法。我正在创建一个 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);
}
}
}

}

最佳答案

你的逻辑没问题。 Android Studio(或其他什么?)只是提示分支太多,无法计算该方法的数字复杂度。

如果您想减轻错误,请创建一个新类来将 BMI 值(可能还有性别的 boolean 值或枚举值(我假设这就是 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;
}

关于java - Error Method太复杂,数据流算法无法分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29979353/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com