我有一堆放在列表框中的数据。使用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);
}
答案 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
。每当您解析新分数时,请将分数检查为高分。如果新分数较低,则不执行任何操作。如果新分数较高,请将其指定为高并继续。低分的反向逻辑也是如此。