-1

Итак, у меня есть кнопка, которая читает файл и помещает содержимое этого файла в список. При нажатии на кнопку это то, что показывает:Чтение более одного целого числа в строке в списке

Jim 6 8 9

Tim 7 5 6

Билл 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) 

Это то, что производит мой код:

, а затем MessageBox шоу 28

+3

Split линия на пробельных, удалите первый элемент массива возвращается, преобразовать три оценки в целые числа, а затем Calc средний – Steve

+0

Это дубликат http://stackoverflow.com/questions/29902255/working-out-averages-of-numbers-in-a-list-box-line/29902583#29902583 – Shar1er80

ответ

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

+0

Должно ли dim scores как string быть списком не то, что я положил. Должен ли я преобразовать окно списка в строку, если бы я хотел, чтобы lisbox находился в том месте, где u положил Bill – Brandon

+0

@Bradon Это образец кода, который поможет вам в правильном направлении, он не предназначен для прямого использования ваш вопрос. – Shar1er80

0

Я верю, что ваша основная проблема заключается в том, что ваш вызов регулярного выражения захватывает только первое совпадение. Измените переменную «score» на MatchCollection и используйте функцию Matches функции regex. Затем вы можете использовать For ... Каждый, чтобы разобрать спички и добавить их в список, вычислить свои средние значения и т. Д.

+0

Когда я использую matchcollection и соответствует этой части кода, затем подчеркивается синим цветом; Если оценка.Success Затем, а также; scorevalues.Add (Convert.ToInt32 (score.Value)) – Brandon

+0

В нем говорится, что они не являются членами matchcollection – Brandon

+0

. Ответ на этот ответ в основном ответил вам. Я пытался просто дать вам подсказки, чтобы вы могли поразмыслить об этом, так как вы студент. Я не верю, что какое-либо реальное обучение достигается, когда весь ответ вам просто дан. – Ricochetv1

Смежные вопросы