0

Visual Basic クラスの宿題をやっています。私はほとんどのコードを書きましたが、ループが探しているものが見つからない場合に例外をキャッチする If Not ステートメントを除いて、すべてがうまく機能しているようです。コードの見た目に問題があることは誰にでもあります。ファイルはすでに参照ボタンを使用してロードされており、ループが検索できる情報を入力すると検索が機能します。

Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As   
System.EventArgs)

Handles btnSearch.Click
    'event level variables
    Dim Found As Boolean
    Dim Counter As Integer

    'looks for entry match
    If rdoAbbrev.Checked = True Then
        Do Until Found Or Counter > 257
            If Country(Counter).Abbreviation.ToUpper = txtAbbrev.Text.ToUpper Then
                Found = True
                txtCountry.Text = Country(Counter).Names
            Else
                Counter += 1
            End If
        Loop
    Else
        Do Until Found Or Counter > 257
            If Country(Counter).Names.ToUpper = txtCountry.Text.ToUpper Then
                Found = True
                txtAbbrev.Text = Country(Counter).Abbreviation
            Else
                Counter += 1
            End If
        Loop
        If Not Found Then
            MessageBox.Show("This is not a valid entry.", "NO MATCH FOUND", MessageBoxButtons.OK)
            If rdoAbbrev.Checked = True Then
                txtAbbrev.Text = ""
                txtAbbrev.Focus()
            Else
                txtCountry.Text = ""
                txtCountry.Focus()

            End If
        End If
    End If
    'match not found response

    'reset variables
    Counter = 0
    Found = False
End Sub
4

3 に答える 3

1

If Not Foundの場合にのみブロックされますrdoAbbrev.Checked = True。それはあなたが意図したものですか?そうでない場合は、そのコード ブロックを最初のブロックの外側 (その下) に配置するか、最初のループの後にIf2 番目のブロックを配置する必要があります。IfWhile

編集
国は配列のようです。おそらく使用する必要がありますCounter >= Country.Length

VB.NET の配列は 0 ベースです。つまり、最初の項目は にありCountry(0)、2 番目の項目は にあるということですCountry(1)。配列に 100 個の要素がある場合、最後の要素は にあることになりCountry(99)ます。Country(100)存在しないため、アクセスしようとすると例外が発生します。

宿題の要件が何であるかはわかりませんが、通常、コレクションの要素 (配列、リストなど) を反復するには、For ループを使用します。Exit コマンドを使用すると、早期にループから抜け出すことができます。

For Counter As Integer = 0 To Country.Length - 1
     '...Country(Counter)
     If Found Then Exit For
Next
于 2012-10-05T18:14:24.653 に答える
0

プロパティに関係なく「Not Found」部分を実行すると仮定するとrdoAbbrev.Checked、ロジックのわずかなエラーのように見えます (簡単に修正できます)。

Private Sub btnSearch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSearch.Click
    'event level variables
    Dim Found As Boolean
    Dim Counter As Integer

    'looks for entry match
    If rdoAbbrev.Checked = True Then
        Do Until Found Or Counter > 257
            If Country(Counter).Abbreviation.ToUpper = txtAbbrev.Text.ToUpper Then
                Found = True
                txtCountry.Text = Country(Counter).Names
            Else
                Counter += 1
            End If
            'You could also write this as:
            'Found = Country(Counter).Abbreviation.ToUpper = txtAbbrev.Text.ToUpper
            'If Found Then
            '    txtCountry.Text = Country(Counter).Names
            'Else
            '    Counter += 1
            'End If
        Loop
    Else
        Do Until Found Or Counter > 257
            If Country(Counter).Names.ToUpper = txtCountry.Text.ToUpper Then
                Found = True
                txtAbbrev.Text = Country(Counter).Abbreviation
            Else
                Counter += 1
            End If
            'You could also write this as:
            'Found = Country(Counter).Names.ToUpper = txtCountry.Text.ToUpper
            'If Found Then
            '    txtAbbrev.Text = Country(Counter).Abbreviation
            'Else
            '    Counter += 1
            'End If
        Loop
    End If
    'match not found response
    'Move your "Not Found" here so that the not found works regardless of the rdoAbbrev.Checked property.
    If Not Found Then
        MessageBox.Show("This is not a valid entry.", "NO MATCH FOUND", MessageBoxButtons.OK)
        If rdoAbbrev.Checked = True Then
            txtAbbrev.Text = ""
            txtAbbrev.Focus()
        Else
            txtCountry.Text = ""
            txtCountry.Focus()

        End If
    End If

    'reset variables
    Counter = 0
    Found = False
End Sub
于 2012-10-05T18:14:18.293 に答える
-1

おそらく、コード内の範囲内で If ステートメントを終了し、コード行の最後ですべての If ステートメントを終了しないようにする必要があります。通常、Basicで機能します。Basic には多くの利点があると思いますが、扱いが簡単なため、問題のある高級言語ではありません。

于 2014-01-11T19:34:21.320 に答える