WPF+C#饮水计算系统杯容量变更后计算错误求助
解决饮水量计算系统中杯容量变更后的计算错误问题
我一眼就看出问题出在哪了——你现在是在累加喝的杯数,然后用总杯数乘以当前的杯容量来得到总饮水量。这就意味着,当你修改杯容量后,之前喝的所有杯数都会被重新用新的容量计算,自然就和实际饮水量对不上了!
举个对应你场景的例子:
- 杯容量200mL时,两次输入1,总杯数变成2,总水量算出来是2×200=400mL(这时候是对的)
- 把杯容量改成300mL后,再输入1,总杯数变成3,你的代码会算3×300=900mL,但实际应该是之前的400mL加上新喝的300mL,也就是700mL
正确的计算方案
你需要维护的是总饮水量(mL),而不是总杯数。具体逻辑调整如下:
- 定义一个类级别的全局变量
totalWaterMl,初始值设为0,专门用来存储已经喝的总水量。 - 当用户输入杯数时,先算出本次喝的水量:
本次饮水量 = 输入的杯数 × 当前设置的杯容量 - 把本次饮水量加到
totalWaterMl上 - 直接将
totalWaterMl的数值显示到textCounter控件中
修改后的代码示例
// 在你的窗体类里先定义这个变量,初始为0 private int totalWaterMl = 0; // 替换你原来的计算逻辑代码 private void CalculateWater() { // 用TryParse代替Parse,避免用户输入非数字导致程序崩溃 if (int.TryParse(this.takeWater.Text, out int cupsDrank)) { int currentCupCapacity = cupml; // 假设cupml是你存储当前杯容量的变量 int addWater = cupsDrank * currentCupCapacity; totalWaterMl += addWater; textCounter.Text = $"{totalWaterMl} mL"; // 加上单位更直观 } else { // 给用户友好提示,处理无效输入 MessageBox.Show("请输入有效的数字哦!"); } }
为什么这样改能解决问题?
每次计算都是基于当前杯容量算出单次饮水量,然后累加到总水量里,之前的总水量不会因为杯容量的变更而被重新计算。对应你的场景:
- 杯容量200mL时,两次输入1,总水量变成200+200=400mL
- 修改杯容量为300mL后,输入1,总水量变成400+300=700mL,完全符合预期
内容的提问来源于stack exchange,提问作者Lucas Barbosa
相关产品推荐
相关产品推荐

