对于每个下一个循环,为下一个循环最高数字

时间:2014-03-31 17:08:18

标签: vb.net

很抱歉,如果这是真正的基本问题,但我的教科书说要修改btnGet_Click过程以使用For Each ... Next语句而不是For ... Next语句。我无法让它正常工作,所以这里是原来For Each ... Next循环。

 Private Sub btnGet_Click(sender As Object, e As EventArgs) Handles btnGet.Click
    ' displays the highest commission and the
    ' number who were paid that amount

    Dim intCommissions() As Integer = {2500, 3400, 1000,
                                       3400, 2500, 1000,
                                       2850, 3000, 2780, 1890}
    Dim intLastSub As Integer =
        intCommissions.GetUpperBound(0)
    Dim intHighest As Integer = intCommissions(0)
    Dim intSalesPeople As Integer = 1

    For intSub As Integer = 1 To intLastSub
        If intCommissions(intSub) = intHighest Then
            intSalesPeople += 1
        Else
            If intCommissions(intSub) > intHighest Then
                intHighest = intCommissions(intSub)
                intSalesPeople = 1
            End If
        End If
    Next intSub

    lblHighest.Text = intHighest.ToString("C0")
    lblSalespeople.Text = intSalesPeople.ToString
End Sub 

3 个答案:

答案 0 :(得分:3)

您只需要在intCommissions数组上运行for each:

    Dim intCommissions() As Integer = {2500, 3400, 1000,
                                3400, 2500, 1000,
                                2850, 3000, 2780, 1890}
    Dim intHighest As Integer = intCommissions(0)
    Dim intSalesPeople As Integer = 1

    For Each intCommission In intCommissions
        If intCommission = intHighest Then
            intSalesPeople += 1
        Else
            If intCommission > intHighest Then
                intHighest = intCommission
                intSalesPeople = 1
            End If
        End If
    Next

答案 1 :(得分:1)

不是你的书要求你做的,所以这不是你问题的严格答案,但如果你想看看Linq ......

Dim intHighest = intCommissions.Max()
Dim intSalesPeople = intCommissions.Where(Function(x) x = intHighest ).Count()

lblHighest.Text = intHighest.ToString("C0")
lblSalespeople.Text intSalesPeople.ToString)

答案 2 :(得分:1)

    Dim intCommissions() As Integer = {2500, 3400, 1000,
                                       3400, 2500, 1000,
                                       2850, 3000, 2780, 1890}
    Dim intLastSub As Integer =
        intCommissions.GetUpperBound(0)
    Dim intHighest As Integer = intCommissions(0)
    Dim intSalesPeople As Integer = 0    ' you need set 0.

    For Each intCurrent In intCommissions
        If intCurrent = intHighest Then
            intSalesPeople += 1
        Else
            If intCurrent > intHighest Then
                intHighest = intCurrent
                intSalesPeople = 1
            End If
        End If

    Next

    Label1.Text = intHighest.ToString("C0")
    TextBox1.Text = intSalesPeople.ToString