视觉基础:降雨统计

时间:2016-04-18 18:45:45

标签: vb.net

我想弄清楚我错过了什么。我已经提交了这个家庭作业,如你所见。当返回降雨最小和最大统计数据时,你还应该带着最小和最大值的月份。我尝试了许多不同的方法,但似乎没有任何工作。我错过了什么?不要匆忙,因为我应该在4月19日到期,但我已经提交了它。试着看看我哪里出错了。

Const intMONTHS As Integer = 11
Dim sngRain(intMONTHS) As Single
Dim strMonths() As String = {"January", "February", "March", "April",
       "May", "June", "July", "August", "September", "October", "November",
       "December"}
Private Sub btnInput_Click(sender As Object, e As EventArgs) Handles btnInput.Click
    lstOutput.Items.Add("Monthly Rainfall Input")
    lstOutput.Items.Add("___________________________")
    GetRainAmount(sngRain)

End Sub

Sub GetRainAmount(ByRef sngRain() As Single)
    Dim intCount As Integer = 0
    Do While intCount < sngRain.Length
        Try
            sngRain(intCount) =
                CDec(InputBox("Please enter the amount of Rain(in inches) for " & strMonths(intCount)))
            lstOutput.Items.Add(("Rainfall for " & strMonths(intCount) & " = " & sngRain(intCount)))
            intCount += 1
        Catch ex As Exception
            MessageBox.Show("Enter a valid numeric value.")
        End Try
    Loop
End Sub

Function Total(ByVal sngRain() As Single) As Single
    Dim sngTotal As Single = 0
    Dim intCount As Integer

    For intCount = 0 To (sngRain.Length - 1)
        sngTotal += sngRain(intCount)

    Next
    Return sngTotal
End Function

Function Average(ByVal sngRain() As Single) As Single
    Return Total(sngRain) / strMonths.Length
End Function

Function Minimum(ByVal sngRain() As Single) As Single
    Dim intCount As Integer
    Dim sngMinimum As Single
    Dim intminIndex As Integer

    sngMinimum = sngRain(0)

    For intCount = 0 To (sngRain.Length - 1)
        If sngRain(intCount) < sngMinimum Then
            sngMinimum = sngRain(intCount)
            intminIndex = intCount
        End If
    Next
    Return sngMinimum

End Function
Function Maximum(ByVal sngRain() As Single) As Single
    Dim intCount As Integer
    Dim sngMaximum As Single
    Dim intmaxIndex As Integer

    sngMaximum = sngRain(0)

    For intCount = 0 To (sngRain.Length - 1)
        If sngRain(intCount) > sngMaximum Then
            sngMaximum = sngRain(intCount)
            intmaxIndex = CInt(strMonths(intCount))
        End If
    Next
    Return sngMaximum

End Function

Private Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click
    Dim intminIndex As Integer
    Dim intmaxIndex As Integer
    Dim sngTotal As Single
    Dim sngAverage As Single
    Dim sngMinimum As Single
    Dim sngMaximum As Single

    sngTotal = Total(sngRain)
    sngAverage = Average(sngRain)
    sngMinimum = Minimum(sngRain)
    sngMaximum = Maximum(sngRain)

    lblTotalRain.Text = ("The total annual rainfall was " & sngTotal)
    lblAverage.Text = ("The average monthly rainfall was " & sngAverage)
    lblMinimum.Text = ("The minimum monthly rainfall was " & sngMinimum & "(" & strMonths(intminIndex) & ")")
    lblMaximum.Text = ("The maximum monthly rainfall was " & sngMaximum & "(" & strMonths(intmaxIndex) & ")")
End Sub

Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click
    lstOutput.Items.Clear()
    lblTotalRain.Text = String.Empty
    lblAverage.Text = String.Empty
    lblMinimum.Text = String.Empty
    lblMaximum.Text = String.Empty

End Sub

Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
    Me.Close()
End Sub

结束班

1 个答案:

答案 0 :(得分:1)

您似乎在Maximum函数中正确设置了intmaxIndex,在Minimum函数中设置了intminIndex,但这些值对于每个函数都是本地的。然后没有设置btnDisplay_Click中的那些变量。

您可以通过将intminIndex和intmaxIndex变量ByRef分别传递给Minimum和Maximum函数来获取最小和最大月份索引。

Function Minimum(ByVal sngRain() As Single, ByRef intminIndex as Integer) As Single
    Dim intCount As Integer
    Dim sngMinimum As Single

    sngMinimum = sngRain(0)

    For intCount = 0 To (sngRain.Length - 1)
        If sngRain(intCount) < sngMinimum Then
            sngMinimum = sngRain(intCount)
            intminIndex = intCount
        End If
    Next
    Return sngMinimum

End Function
Function Maximum(ByVal sngRain() As Single, ByRef intmaxIndex as Integer) As Single
    Dim intCount As Integer
    Dim sngMaximum As Single

    sngMaximum = sngRain(0)

    For intCount = 0 To (sngRain.Length - 1)
        If sngRain(intCount) > sngMaximum Then
            sngMaximum = sngRain(intCount)
            intmaxIndex = intCount
        End If
    Next
    Return sngMaximum

End Function

Private Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click
    Dim intminIndex As Integer = 0
    Dim intmaxIndex As Integer = 0
    Dim sngTotal As Single
    Dim sngAverage As Single
    Dim sngMinimum As Single
    Dim sngMaximum As Single

    sngTotal = Total(sngRain)
    sngAverage = Average(sngRain)
    sngMinimum = Minimum(sngRain, intminIndex)
    sngMaximum = Maximum(sngRain, intmaxIndex)

    lblTotalRain.Text = ("The total annual rainfall was " & sngTotal)
    lblAverage.Text = ("The average monthly rainfall was " & sngAverage)
    lblMinimum.Text = ("The minimum monthly rainfall was " & sngMinimum & "(" & strMonths(intminIndex) & ")")
    lblMaximum.Text = ("The maximum monthly rainfall was " & sngMaximum & "(" & strMonths(intmaxIndex) & ")")
End Sub