标签输出错误

时间:2016-04-29 14:46:08

标签: vb.net

我有我编写的代码,它有3个飓风数,飓风平均数以及来自txt文件的飓风最多的年份标签。代码正常,前2个标签显示正确的结果。然而,最后一个标签显示的是飓风多而非一年的年份数。

这就是我所拥有的:

   Option Strict On

Public class frmHurricaneStatistics

'   Class level Private variables.
Public Shared _intSizeOfArray As Integer = 20
Private _strYears(_intSizeOfArray) As String
Private _intNumberOfHurricans(_intSizeOfArray) As Integer

Private Sub frmHurricaneStatistics_Load(sender As Object, e As EventArgs
                                        ) Handles MyBase.Load

    '   This load event reads the inventory text file and fills
    '   the ComboBox object with the Hurricane Statistics.

    '   Initialize an instace of the streamreader object and declare variables.
    Dim objReader As IO.StreamReader
    Dim strHurricaneStatistics As String = "Hurricanes.txt"
    Dim intCount As Integer = 0
    Dim intFill As Integer
    Dim strFileError As String = "The file is not available. Please restart the
        application when the file is available."

    '   Verify the Hurricane.txt file exists.
    If IO.File.Exists(strHurricaneStatistics) Then
        objReader = IO.File.OpenText(strHurricaneStatistics)

        '   Read the file line by line until the file is completed.
        Do While objReader.Peek <> -1
            _strYears(intCount) = objReader.ReadLine()
            _intNumberOfHurricans(intCount) = Convert.ToInt32(objReader.ReadLine())
            intCount += 1
        Loop
        objReader.Close()

        '   The ComboBox objext is filled with the Years for Hurricanes.
        For intFill = 0 To (_strYears.Length - 1)
            cmbYears.Items.Add(_strYears(intFill))
        Next
    Else
        MsgBox(strFileError, , "Error")
        Close()

        '   If ComboBox is filled then enable the Display Statistics button.
        '   btnDisplayStatistics.Enabled = True
    End If
End Sub

Private Sub btnDisplayStatistics_Click(sender As Object, e As EventArgs
                                       ) Handles btnDisplayStatistics.Click

    '   This click event calls the sub procedures for the selected years and
    '   the number of hurricans in that year.
    Dim intSelectedYear As Integer
    Dim strMissingSelection As String = "Missing Selection"
    Dim strSelectAYearError As String = "Please Select a Year"

    '   If the ComboBox object has a selection, Display Statistics.
    If cmbYears.SelectedIndex >= 0 Then
        intSelectedYear = cmbYears.SelectedIndex
    Else
        MsgBox(strSelectAYearError, , strMissingSelection)
    End If

    '   The procedure MakeLabelsVisible Is called to display the labels
    '   And the results.
    MakeLabelsVisible()

    Dim intAverage As Double
    Dim intYear As Integer


    For intIndex As Integer = 0 To _intNumberOfHurricans.Length - 1
        If intYear < _intNumberOfHurricans(intIndex) Then
            intYear = _intNumberOfHurricans(intIndex)
        End If
        intAverage = intAverage + _intNumberOfHurricans(intIndex)
    Next

    intAverage = intAverage / _intNumberOfHurricans.Length


    '   Display the statistics for the Storm Average in the selected Year
    '   and the most active year within the range of year.

    lblNumberOfHurricanes.Text = "The Number of Hurricanes in the Year " &
        _strYears(intSelectedYear) & " is " & _intNumberOfHurricans(intSelectedYear).ToString() & "."
    lblAvergeNumberHurricanes.Text = "The Average Number of Storms was " & FormatNumber(intAverage, 0) & " Hurricanes."
    lblMostStorms.Text = "The Year " & intYear & " Had The Most Storms Between " & (
        _strYears(20) & " And " & (_strYears(0).ToString))




End Sub




Private Sub MakeLabelsVisible()

    '   This procedure displays the labels with the calculated results
    lblNumberOfHurricanes.Visible = True
    lblAvergeNumberHurricanes.Visible = True
    lblMostStorms.Visible = True




End Sub

更新了代码。

2 个答案:

答案 0 :(得分:2)

看起来你只是用飓风的数量来填充intYear?

intYear = _intNumberOfHurricans(intIndex)

我无法看到你想从哪里获得一年的价值。甚至还存在吗?请发布剩下的代码

编辑:

根据我的理解(纠正我,如果我错了),你想要飓风数量最多的一年吗?如果是的话

尝试

For intIndex As Integer = 0 To _intNumberOfHurricans.Length - 1
    If _intNumberOfHurricans(intIndex) = _intNumberOfHurricans.Max Then
        intYear = Integer.Parse(_strYears(intIndex))
    End If
    intAverage = intAverage + _intNumberOfHurricans(intIndex)
Next

我在这里做的是寻找_intNumberOfHurricans中的最高值,并将其与当前迭代中的飓风数量进行比较。如果它们是相同的,那么我们在飓风数量最多的那一年,所以我们用intYear填充_strYears(但作为整数)。

此代码并不完美。例如,如果最高飓风数为100,但有2年有100个飓风,那么它只会给出最近一年,而不是第一年有100个飓风。

答案 1 :(得分:1)

因为你设置了;

intYear = _intNumberOfHurricans(intIndex)

不是年份,飓风人数。这应该指向一年的财产。

intYear = _intNumberOfHurricans(intIndex).Year
希望有所帮助。