C#Listbox / foreach循环问题

时间:2011-04-25 03:34:49

标签: c#

我有一堆放在列表框中的数据。使用string.substring()方法我需要返回并获取一些数据进行一些计算(平均值,高分和低分)。我创建了一个名为“calcStats”的方法来为我计算这些数据。我完全陷入了这个foreach循环。我怎样才能找到这些值?有人可以就我应该做些什么做一些有用的建议,或者创建一个简短的例子,以便我可以学习做什么?

我现在明白为什么平均值不起作用了。从这里我可以做什么来“允许”单个数字和两位数?

 private void calcStats()
    {
        string value;
        int value2;
        int total = 0;
        decimal adverage;
        decimal high;
        decimal low;


        lblHigh.Text = Convert.ToString(0);



        foreach (string itemInList in lstBox.Items)
        {
            value = (itemInList.Substring(50, 3));
            value2 = int.Parse(value);

            total += (value2);




        }

       adverage = total/(lstBox.Items.Count);

       lblAdverage.Text = Convert.ToString(adverage);




    }

3 个答案:

答案 0 :(得分:0)

这是一个学习如何使用调试器的好机会 - 查看调试菜单,了解“切换断点”,“介入”,“跳过”,“继续”的意思,学习如何“观察变量“。

尝试谷歌搜索“调试视觉工作室”等。

当你学会做这些事情的时候,你应该能够很容易地找出你的程序有什么问题,并且你已经学会了如何解决你在其中编写的任何其他程序。将来

相信我,这不是你写的第一个无法正常工作的程序:)

并尝试这些命令 - “全选” - “cntrl-a”和“格式” - “cntrl -k cntrl-d” - 这将格式化整个文档。

答案 1 :(得分:0)

你应该像Larry说的那样进行调试,但我敢打赌这会有所帮助

       adverage = total / lstBox.Items.Count;

编程中最重要的事情之一是知道api(或者在公共运行时库的情况下)。当对象本身告诉你时,没有理由计算项目数。

答案 2 :(得分:0)

您的代码中存在无数错误。对于初学者来说,平均得分为60,因为当你加50和100时,它实际上只加50和10然后除以1.观察:

    foreach (string itemInList in lstBox.Items)
    {
        value = decimal.Parse(itemInList.Substring(50, 2)); //This line truncates your score of 100 to 10
        total += (value);
    }
    count++; //This line only runs once.  So count is = 1 in the next line
    adverage = (total) / (count); //Since the '100' was truncated to 10, the total of 50 + 100 is 60.  Divide that by count which is only 1 and that's how you get 60.

要解决此问题,您可以在foreach循环内移动count ++。或者,您可以除以lstBox.Items.Count并消除变量计数:

    foreach (string itemInList in lstBox.Items)
    {
        value = decimal.Parse(itemInList.Substring(50, 2));
        total += (value);
    }
    adverage = (total) / lstBox.Items.Count;
    lblAdverage.Text = Convert.ToString(adverage);

该代码段可以为您提供所需内容。唯一的问题是它不适用于单位数分数或三位数分数(100)。

就跟踪高分而言,通常的方法是将第一个分数放入您已经拥有的临时变量high。每当您解析新分数时,请将分数检查为高分。如果新分数较低,则不执行任何操作。如果新分数较高,请将其指定为高并继续。低分的反向逻辑也是如此。