You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:C#代码中totalbmi未赋值局部变量问题排查

问题分析与修复方案

你的代码核心问题出在变量初始化逻辑和代码执行顺序上:

  1. totalbmi作为decimal类型,声明时未赋值,默认值为0。当用户在文本框输入非有效数字时,TryParse执行失败,totalbmi会保持默认的0值,直接触发if (totalbmi <= 18.5m)分支,错误显示"UNDERWEIGHT"。
  2. 体重分类的判断逻辑写在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 22:45:01