2016-04-29 4 views
1

У меня есть код, который я написал, который имеет 3 метки для количества ураганов, средних ураганов и год с самыми ураганами из txt-файла. Код работает, и первые 2 метки отображают правильные результаты. Однако последний ярлык показывает номер года с наибольшим количеством ураганов вместо года.Получение неправильного вывода в метке

Вот что у меня есть:

Option Strict On 

Открытый класс 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

Похоже, вы просто заселяете IntYear количеством ураганов?

intYear = _intNumberOfHurricans(intIndex) 

Я не могу видеть, откуда вы хотите получить значение за год. Существует ли вообще? Пожалуйста, пост остальной части кода

Edit:

Из того, что я понимаю (поправьте меня, если я ошибаюсь), вы хотите, год, который имел наибольшее количество ураганов? Если это так

Попробуйте

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 ураганов.

+0

HI Я положил остальную часть кода.Я очень признателен за вашу помощь –

+0

Обновлен мой ответ, дайте мне знать, как это происходит – p3tch

+0

Привет, p3tch, Мне очень жаль, что я очень сильно болею, но я ввел код, как вы уже сказали, и теперь я получаю форму. Я собираюсь просто сдаться. В конце концов, я имею в виду, насколько это плохо повлияло на мой класс. lol –

1

Потому что вы установили;

intYear = _intNumberOfHurricans(intIndex) 

Не год, количество ураганов. Это должно указывать на свойство Year.

intYear = _intNumberOfHurricans(intIndex).Year 

Надежда помогает.

+0

Привет снова. Я очень ценю помощь. Я добавил .year, и я получаю сообщение, что год не является членом целого. Я только на своей шестой неделе программирования, поэтому я не уверен, как это исправить. –

+0

Привет, я предположил, что вы используете oop, я имею в виду, что вам нужно добавить свойство Year внутри класса, который у вас был. Если у вас его нет, вы не должны указывать переменную _intNumberOfHurricans (intIndex) для intYear, потому что это неверно. Код отсутствует, я не могу рассказать больше, но я думаю, вы не читаете данные Year из текстового файла. – Berkay

+0

Hi B.Yaylaci. Я пытаюсь получить данные года из текстового файла. в файле txt есть 20 записей. например: год 2010, тогда под 17 ураганами. У меня есть туманные страсти за годы и _InNumberOfHurricans для числа. мой результат показывает количество, а не годы. Я сталкиваюсь с проблемами при попытке получить доступ к году ex. год 2005, я только получаю число в этом году, что составляет 27 в моем результате –

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