求助:C#代码中totalbmi未赋值局部变量问题排查
问题分析与修复方案
你的代码核心问题出在变量初始化逻辑和代码执行顺序上:
totalbmi作为decimal类型,声明时未赋值,默认值为0。当用户在文本框输入非有效数字时,TryParse执行失败,totalbmi会保持默认的0值,直接触发if (totalbmi <= 18.5m)分支,错误显示"UNDERWEIGHT"。- 体重分类的判断逻辑写在
TryParse代码块外部,无论输入是否有效都会执行,这不符合业务逻辑——只有输入有效、BMI计算完成后,才应该进行体重分类判断。
修复后的代码
// Input Variables decimal height; // 用户身高 decimal weight; // 用户体重 decimal totalbmi; // 计算后的BMI值 string weightcategory = "YOU ARE:\n"; // 显示用户体重分类(过轻/正常/超重等) string gender = "YOUR GENDER IS: \n"; // 显示用户性别 // 验证文本框输入的数字有效性 if (decimal.TryParse(heightTextBox.Text, out height) && decimal.TryParse(weightTextBox.Text, out weight)) { totalbmi = (weight * 703) / (height * height); // BMI计算公式 finalBMILabel.Text = totalbmi.ToString("n"); // 将BMI值显示到标签 // 仅在输入有效时判断体重分类 if (totalbmi <= 18.5m) { weightcategory += "UNDERWEIGHT\n"; } else if (totalbmi >= 18.5m && totalbmi < 24.9m) { weightcategory += "NORMAL WEIGHT\n"; } else if (totalbmi >=25m && totalbmi < 29.9m) { weightcategory += "OVERWEIGHT\n"; } // 补充BMI≥30的肥胖分支,完善逻辑 else { weightcategory += "OBESE\n"; } } else { // 输入无效时给出提示 finalBMILabel.Text = "请输入有效的身高/体重数值"; weightcategory = "输入无效,请检查后重试"; }
关键修复点
- 将体重分类判断逻辑移入
TryParse成功的代码块,确保只有计算出有效BMI后才执行分类判断。 - 添加
else分支处理输入无效的场景,避免错误的分类结果。 - 补充了BMI≥30的肥胖分支,让体重分类逻辑更完整。
内容的提问来源于stack exchange,提问作者Apollo
相关产品推荐
相关产品推荐

