2014-11-28 3 views
0

Я должен был создать программу, которая просит меня найти максимальное значение одного определенного массива. Я использую несколько форм в этом проекте и использовал пользовательский тип данных и создал под ним несколько массивов. Существует первая форма, связанная с этим, которая определяет мой определенный тип данных: gStudentRecord, а массивы, которые определяют его, - это фамилия, Id и GPA. Эта вторая форма - это где я пишу весь код для отображения того, что я хочу. Мой вопрос заключается в том, как получить Max GPA из этого массива. Я сожалею, если это не в очень хорошем формате, это первый раз, когда я использовал StackoverflowVisual Basic Confusion

Public Class frmSecond 

    Private Sub frmSecond_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Dim Ctr As Integer 
    Dim Line As String 

    lstDisplay.Items.Clear() 

    lstDisplay.Items.Add("Name".PadRight(25) & "ID".PadRight(16) & "GPA".PadRight(20) & "Out of state".PadRight(10)) 
    For Ctr = 0 To gIndex Step 1 
     Line = gCourseRoster(Ctr).LastName.PadRight(20) & gCourseRoster(Ctr).ID.PadRight(15) & gCourseRoster(Ctr).GPA.ToString.PadRight(15) & gCourseRoster(Ctr).OutOfState.ToString().PadLeft(5) 
     lstDisplay.Items.Add(Line) 
    Next 
    End Sub 

    Private Sub btnStats_Click(sender As Object, e As EventArgs) Handles btnStats.Click 
    Dim Ctr As Integer = 0 
    Dim Average As Double 
    Dim Sum As Double 
    Dim Found As Boolean = False 
    Dim Pass As Integer 
    Dim Index As Integer 

    lstDisplay.Items.Clear() 

    **For Ctr = 0 To gIndex Step 1 
     If gCourseRoster(Ctr).GPA > gCourseRoster(Ctr).GPA Then 

      lstDisplay.Items.Add(gCourseRoster(Ctr).GPA) 
     End If 
    Next** 

    Average = gComputeAverage(Sum) 

    lstDisplay.Items.Add("Number of Students: " & gNumberOfStudents) 
    lstDisplay.Items.Add("Average: " & Average) 

    End Sub 
    Private Function gComputeAverage(Sum As Double) As Double 
    Dim Ctr As Integer 
    Dim Average As Double 

    For Ctr = 0 To gIndex Step 1 
     Sum = Sum + gCourseRoster(Ctr).GPA 
    Next 

    Average = Sum/gNumberOfStudents 
    Return Average 
    End Function 

End Class 
+0

Использовать 'List (Of gCourseRoster)' вместо массива - это коллекция, специфичная для типов. – OneFineDay

+0

'gCourseRoster (Ctr) .GPA> gCourseRoster (Ctr) .GPA' всегда будет ложным, потому что сравнение имеет те же две вещи по обе стороны от сравнения неравенства. –

ответ

0

Вы можете использовать лямбда-выражения, чтобы дразнить его. Часть Cast преобразует из gCourseRoster в коллекцию Double путем подачи GPA в инструкцию Select.

Dim gList As New List(Of gCourseRoster) 
gList.Add(New gCourseRoster With {.id = 1, .name = "Bob", .GPA = 3.9}) 
gList.Add(New gCourseRoster With {.id = 2, .name = "Sarah", .GPA = 3.2}) 
gList.Add(New gCourseRoster With {.id = 3, .name = "Frank", .GPA = 3.1}) 
Dim maxGPA = gList.Cast(Of gCourseRoster).Select(Function(c) c.GPA).ToList.Max 
MessageBox.Show(maxGPA.ToString) 

Output: 3.9