Too much code, so I'm not going to look through all of it. This caught my attention as "obviously wrong" though: else if (BMI <= 25 || BMI < 28.9) that's really just BMI < 28.9, the other part is redundant. It's probably meant to be >= 25? But then the logic also doesn't quite work, because clearly there is a gap between 25 and 24.9, a rather large gap at that - if I counted them correctly, there are 28147497671065 doubles that have a value strictly between 24.9 and 25, which implies that almost all of them won't be generated by sensible inputs, but see for example 90kg / 1.90m2. Also, BMICalculate does some unexpected things, taking nice arguments and then ignoring them and pulling its values from some control.