C# 将列表的总和作为变量,并在运行时对其进行编辑

C# 将列表的总和作为变量,并在运行时对其进行编辑,c#,subtraction,C#,Subtraction,我试图计算特定变量的结束值,这取决于是否选中复选框。然而,这是动态完成的 我正在努力实现的目标: 上面的示例运行良好,但当我开始取消选中复选框时,它开始出错。它减去两倍的时间,我不知道为什么: My Code TimePent是我希望在末尾使用的变量: 阶级 图形用户界面: 为什么减法不正确 未选中复选框时进行减法: if(a.isChecked()) { total += a.getTimeSpent(); } else { total -= a.getTimeSpent();

我试图计算特定变量的结束值,这取决于是否选中复选框。然而,这是动态完成的

我正在努力实现的目标:

上面的示例运行良好,但当我开始取消选中复选框时,它开始出错。它减去两倍的时间,我不知道为什么:

My Code TimePent是我希望在末尾使用的变量:

阶级

图形用户界面:


为什么减法不正确

未选中复选框时进行减法:

if(a.isChecked())
{
    total += a.getTimeSpent();
}
else
{
    total -= a.getTimeSpent();// << THIS
}
0来自默认值Total int


若要解决此问题,您可以删除else子句,因为您永远不需要减去可计费时间。

如果未选中复选框,则进行减去:

if(a.isChecked())
{
    total += a.getTimeSpent();
}
else
{
    total -= a.getTimeSpent();// << THIS
}
0来自默认值Total int


要解决这个问题,您可以删除else子句,因为您永远不需要减去计费时间。

您应该完全删除减法。 因此,将其更改为:

if(a.isChecked())
{
     total += a.getTimeSpent();
}

如果total=0,则在计算之前未添加所有值。所以你不需要减法。

你应该完全取消减法。 因此,将其更改为:

if(a.isChecked())
{
     total += a.getTimeSpent();
}

如果total=0,则在计算之前未添加所有值。因此,您不需要进行减法运算。

如果未选中,则逻辑为“如果选中则添加”“如果未选中则减去”。如果仅选中,则应添加逻辑

private void Btn_Validate_Click(object sender, EventArgs e)
    {

        tb_TotalTime.Text = calculateTotalTime().ToString();
    }

    public int calculateTotalTime()
    {
        int total = 0;
        foreach (Activity a in activities)
        {

            if (a.isChecked())
            {
                total += a.getTimeSpent();
            }
        }
        return total;
    }

您的逻辑是“如果选中则添加”“如果未选中则减去”。如果仅选中,则应添加逻辑

private void Btn_Validate_Click(object sender, EventArgs e)
    {

        tb_TotalTime.Text = calculateTotalTime().ToString();
    }

    public int calculateTotalTime()
    {
        int total = 0;
        foreach (Activity a in activities)
        {

            if (a.isChecked())
            {
                total += a.getTimeSpent();
            }
        }
        return total;
    }


在图片中,一切看起来都很好。具体的问题是什么?你在检查的时候加,不是的时候减-5-5+5等于-5。我想你只需要加法,所以去掉其他的。它正在做正确的计算。对于两个未选中的复选框,它变为-10;对于一个选中的复选框,它的值为5,它们的总和变为-5。根据您的期望,结果应该是什么?如果你希望结果是5,你不应该做减法。在图片中,一切看起来都不错。具体的问题是什么?你在检查的时候加,不是的时候减-5-5+5等于-5。我想你只需要加法,所以去掉其他的。它正在做正确的计算。对于两个未选中的复选框,它变为-10;对于一个选中的复选框,它的值为5,它们的总和变为-5。根据您的期望,结果应该是什么?如果你想要结果是5,你就不应该做减法。我不会想到,这就是问题所在。这根本不是编码问题。更多的是一个共同的问题sense@TimSchmelter因为一开始总数是0。然后减去所有未检查的活动时间。第一个是5,第二个是5,第三个是5。第一个和第二个未被检查。总和为0-5-5+5=-5。@TimSchmelter你是如何得出这个结论的?一点道理也没有他似乎明白了now@KahnKah没问题,解决这些问题的最好办法是像解释代码一样仔细阅读代码。当你到达-部分时,你会像那样做。。。嗯。。。这不应该存在。祝你好运我不会想到,这就是问题所在。这根本不是编码问题。更多的是一个共同的问题sense@TimSchmelter因为一开始总数是0。然后减去所有未检查的活动时间。第一个是5,第二个是5,第三个是5。第一个和第二个未被检查。总和为0-5-5+5=-5。@TimSchmelter你是如何得出这个结论的?一点道理也没有他似乎明白了now@KahnKah没问题,解决这些问题的最好办法是像解释代码一样仔细阅读代码。当你到达-部分时,你会像那样做。。。嗯。。。这不应该存在。祝你好运非常感谢,我没注意到非常感谢,我没注意到非常感谢非常感谢