2016-04-28 6 views
2

キャスト例外が発生しており、このコードを多数回書き直しました。私は次の行に例外を取得しています:vb.netでキャスト実行をデバッグする方法は?

If (CInt(hHurricaneYear) < CInt(_strYears(hAverage))) Then 

そして、私は唯一のlblNumberOfHurricansで結果を取得しています。他の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 


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, call the Display Statistics procedure. 
     If cmbYears.SelectedIndex >= 0 Then 
      intSelectedYear = cmbYears.SelectedIndex 
     Else 
      MsgBox(strSelectAYearError, , strMissingSelection) 
     End If 

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

     Dim hHurricaneAverage As Integer 
     Dim hHurricaneYear As Integer = 0 

     For hAverage As Integer = 0 To _strYears.Length - 1 
      If (CInt(hHurricaneYear) < CInt(_strYears(hAverage))) Then 
       hHurricaneYear = CInt(CType(CInt(_strYears(hAverage)), String)) 
      End If 
      hHurricaneAverage = hHurricaneAverage + CInt((_strYears.ToString)) 

      hHurricaneAverage = CInt(hHurricaneAverage/_strYears.Length) 
     Next 

     ' 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 " & 
      hHurricaneAverage & " Hurricanes." 

     Dim intSizeOfArray As Integer = Nothing 
     lblMostStorms.Text = "The Year "(CInt(_strYears(CInt(hHurricaneYear.ToString())) & " 
      Had The Most Storms Between " & (_strYears(0) & _strYears(20).ToString))) 

    End Sub 
Option strict on 
+0

爆弾のときの '_strYears(hAverage)'の値は?そのインデックスにあるものが整数に変換できない場合には、あなたが指定した行に表示されるかもしれませんが、***は*** CInt((_ strYears.ToString))で例外を取得します。 '_strYears'が配列の場合、' _strYears.ToString'はSystem.String [] "になります。これは整数に変換できません。あなたはそれで数学をやろうとしていることを知っているので、その配列は整数でなければなりません。また、 'hHurricaneYear'は整数なので、平均の小数部分を捨てて、' CInt(hHurricaneYear) 'は無意味です。 – Plutonix

+0

こんにちは、私は本当に混乱しています。あなたが言っていることは理にかなっています。私はhurricanes.txtファイルの平均を取得してNumberOfHurricanesというラベルに表示したいと考えています。同じtxtファイルを使用して、2005年の最もハリケーンの多い年を取得してください。 –

+0

こんにちは。私はこの混乱の最初の部分を含めるべきだったのは残念です。あなたはそれをもう一度見て、私が何を間違えたかを見ることができますか? –

答えて

2

あなたのエラーはあなたが整数に全体の文字列配列を変換しようとしていることである:

hHurricaneAverage = hHurricaneAverage + CInt((_strYears.ToString)) 

あなたは_strYearsのインデックスを呼び出す必要があります:

hHurricaneAverage = hHurricaneAverage + CInt((_strYears(hAverage).ToString)) 

このhHurricanAverageが決して計算されないので、なぜ他のラベルが更新されないのか説明します。

+0

こんにちは。私はコードを変更しました。私はキャストを放棄していません。私の平均は今12歳になるはずです。すべてのあなたの助けをありがとう。私は本当にそれをappricate。 –

+0

これは私が今持っているものです。 _intNumberOfHurricans.Lengthの整数= 0としてHAVERAGEに対する整数= 0 として整数暗いhHurricaneYearとして 薄暗いhHurricaneAverage - hHurricaneYear <_intNumberOfHurricans(HAVERAGE)もし1 そしてhHurricaneYear = _intNumberOfHurricans(HAVERAGE) エンドhHurricaneAverage = hHurricaneAverage +もし_intNumberOfHurricans(hAverage) hHurricaneAverage = CInt(hHurricaneAverage/_intNumberOfHurricans.Length) 次へ –

+0

これはhAverage As Integer = 0〜_strYears.length -1の代わりになるはずですか? – Dustin

関連する問題