所以我有一个读取文件的按钮,并将该文件的内容放入列表框中。当我按下按钮时,这就是显示的内容:
吉姆6 8 9Tim 7 5 6
Bill 4 10 8
我想要做的是制作一个单独的按钮,添加每个人的分数,然后找到它们的平均值。一旦计算了人的平均值,那么我希望平均值取代3个分数。
我目前的代码只取每个人的第一个分数,然后添加所有代码并在消息框中显示结果。
这是我目前的代码:
Dim scorevalues As New List(Of Integer)
For Each line As String In System.IO.File.ReadLines(file1)
Dim scores As System.Text.RegularExpressions.Match = System.Text.RegularExpressions.Regex.Match(line, "\d+")
If scores.Success Then
scorevalues.Add(Convert.ToInt32(scores.Value))
End If
Next
listbox1.DataSource = scorevalues
Dim Scoretots As Integer = 0
For scores2 = 0 To listbox1.Items.Count - 1
Scoretots = Scoretots + listbox.Items(scores2)
Next
MessageBox.Show("Total: " & Scoretots.ToString)
这是我的代码产生的:
6
7
4
然后一个消息框显示28
答案 0 :(得分:1)
Sub Main()
Dim scores As String = "Bill 10 9 8"
Dim score As System.Text.RegularExpressions.MatchCollection = System.Text.RegularExpressions.Regex.Matches(scores, "\d+")
Dim sum As Integer = 0
For i As Integer = 0 To score.Count - 1
sum += Convert.ToInt32(score.Item(i).Value)
Console.WriteLine(score.Item(i).Value)
Next
Dim average = sum / score.Count
Console.WriteLine("Average: {0}", average)
Console.ReadLine()
End Sub
结果:
答案 1 :(得分:0)
我相信您的主要问题是您的正则表达式调用仅捕获第一场比赛。 将变量“scores”更改为MatchCollection并使用regex函数的Matches函数。 然后,您可以使用For ... Each来解析匹配并将它们添加到列表中,计算您的平均值等。