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

WPF+C#饮水计算系统杯容量变更后计算错误求助

解决饮水量计算系统中杯容量变更后的计算错误问题

我一眼就看出问题出在哪了——你现在是在累加喝的杯数,然后用总杯数乘以当前的杯容量来得到总饮水量。这就意味着,当你修改杯容量后,之前喝的所有杯数都会被重新用新的容量计算,自然就和实际饮水量对不上了!

举个对应你场景的例子:

  • 杯容量200mL时,两次输入1,总杯数变成2,总水量算出来是2×200=400mL(这时候是对的)
  • 把杯容量改成300mL后,再输入1,总杯数变成3,你的代码会算3×300=900mL,但实际应该是之前的400mL加上新喝的300mL,也就是700mL

正确的计算方案

你需要维护的是总饮水量(mL),而不是总杯数。具体逻辑调整如下:

  1. 定义一个类级别的全局变量totalWaterMl,初始值设为0,专门用来存储已经喝的总水量。
  2. 当用户输入杯数时,先算出本次喝的水量:本次饮水量 = 输入的杯数 × 当前设置的杯容量
  3. 把本次饮水量加到totalWaterMl上
  4. 直接将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:52:41