2

Visual Basicのforループを使用して、文字列変数を文字列配列の要素と比較しようとしています。ユーザーが入力した文字列変数を、小文字のアルファベットの配列と順番に比較しています。何らかの理由で「count」変数が常に25になっているため、論理的な誤りがあります。したがって、ユーザーがZを入力しない限り、常に「申し訳ありませんが、再試行してください」と表示されます。助けてください。

 Dim lower() As String = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l",    "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}
   For count As Integer = 0 To 25
        input = txtInput.Text
        input = input.ToLower
        If input.Equals(lower(count)) Then
            txtResult.Text = "Correct"
        Else
            txtResult.Text = "Sorry, Try again"
        End If
    Next
4

2 に答える 2

1

StackOverflowへようこそ!

「z」と入力した場合にのみ「正しい」結果が得られる理由は、「z」が配列の最後の項目であるためです。「y」と入力すると、count = 24(lower(24)= "y")の結果が正しくなりますが、次のステップで、 "y"をlower(25)(実際には "z")と比較します。そのtxtResult.Textため、「申し訳ありませんが、もう一度お試しください」で上書きされます。

タスクを正しく取得したら、入力文字列が配列に存在するかどうかを確認します。その目的のために、あなたはArray.Contains方法を使うかもしれません:

Dim lower() As String = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l",    "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}
Dim input As String = txtInput.Text
If (lower.Contains(input)) Then
    txtResult.Text = "Correct"
Else
    txtResult.Text = "Sorry, Try again"
End If
于 2013-02-01T06:33:29.157 に答える
1

exit for問題は、一致するものが見つかったら、(を使用して)ループを終了する必要があることです。そうしないと、文字が一致しない場合、txtResults.Textが「申し訳ありませんが再試行してください」にリセットされます。たとえば、「f」と入力すると、txtResults.Textは「Correct」に設定されます。しかし、gに到達すると、現在、txtResults.Textが「Sorry、Try again。」に変更され、h、iなどに変更されます。

これはプログラミングの良い演習ですが、使用できるショートカットがあります。

lower.contains(input.lower)

情報:

http://msdn.microsoft.com/en-us/library/dy85x1sa.aspx

于 2013-02-01T06:35:39.103 に答える