在列表框中的一行上读取多个整数

时间:2015-04-27 20:13:51

标签: vb.net visual-studio-2010 visual-studio visual-studio-2012

所以我有一个读取文件的按钮,并将该文件的内容放入列表框中。当我按下按钮时,这就是显示的内容:

吉姆6 8 9

Tim 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

2 个答案:

答案 0 :(得分:1)

这会让你前进。它与此问题https://stackoverflow.com/questions/29902255/working-out-averages-of-numbers-in-a-list-box-line/29902583#29902583

相同
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

结果:

enter image description here

答案 1 :(得分:0)

我相信您的主要问题是您的正则表达式调用仅捕获第一场比赛。 将变量“scores”更改为MatchCollection并使用regex函数的Matches函数。 然后,您可以使用For ... Each来解析匹配并将它们添加到列表中,计算您的平均值等。