2017-06-10 6 views
0

カウンタが機能しない間にelseを終了しようとすると、最初の名前は見つけられますが残りは見つからないことがあります。ユーザーが間違った名前を入力した場合は、他にメッセージボックスを表示したい私は他のものを入れてみましたが、カウンターがインクリメントしないので、私が姓などを検索すると機能しません。ループを変更せずにコードを手伝ってください。あなたは名前がfound.Youは、if文の中にtrueに設定したかどうかを教えてくれ、その後、ループの後、その値をチェックするためにfoundブールフラグ番目使用する必要がカウンタに問題がある場合入れ子のif文にelseを追加した場合

Dim name(5) As String 
    Dim found As Boolean 
    Dim search As String 

    name(0) = "John" 
    name(1) = "Ken" 
    name(2) = "Jen" 
    name(3) = "Fam" 
    name(4) = "Denny" 

    search = InputBox("search name") 
    found = False 
    Dim counter As Integer = -1 
    While found = False 
     counter = counter + 1 
     If search = name(counter) Then 
      MsgBox("hello") 
      Exit While 
     End If 
    End While 
End Sub 

エンドクラス

+0

を支援するためにそこには 'Else'文はありません。 [ask]を読んで[ツアー] – Plutonix

+0

を取得してください。VB.NETの場合、Dim name(4)As String。 –

答えて

1

あなたが識別子を必要とするコレクションをループしているので、私は、For Eachステートメントを使用することをお勧めします。したがって、別々のカウンタを作成する代わりに、For Eachという識別子を使用してください。

Dim name(4) As String 

name(0) = "John" 
name(1) = "Ken" 
name(2) = "Jen" 
name(3) = "Fam" 
name(4) = "Denny" 

Dim search = InputBox("search name") 
Dim index As Integer = -1 

For i = 0 To name.Length - 1 
    If name(i) = search Then 
     index = i 
     Exit For 
    End If 
Next 

If index > -1 Then 
    MsgBox("Name '" + name(index) + "' was found.") 
Else 
    MsgBox("Name '" + search + "' was not found.") 
End If 

ただ、あなたに私はfoundブール値を削除し、代わりに見つけindex(またはオブジェクト)を使用していた例を与えます。場合は、名前が存在するかどうかを検出するだけでなく、オブジェクトを検索したい場合。

代替は、LINQの(輸入System.Linqの)を使用することです:

Dim found = name.Any(Function(n) n.Equals(search, StringComparison.InvariantCultureIgnoreCase)) 
0

終了する。また、カウンタがリストの最後の要素に到達したら、whileループを終了する必要があります。この場合

Dim name(5) As String 
Dim found As Boolean 
Dim search As String 

name(0) = "John" 
name(1) = "Ken" 
name(2) = "Jen" 
name(3) = "Fam" 
name(4) = "Denny" 

search = InputBox("search name") 
found = False 
Dim counter As Integer = -1 
While found = False 
    counter = counter + 1 
    If search = name(counter) Then 
     MsgBox("hello") 
     found = True 
     Exit While 
    End If 
    If Counter = name.Length - 1 
     Exit While 
    End If 
End While 

If found = True Then 
    MsgBox("Name was found") 
Else 
    MsgBox("Name was not found") 
End If 
+0

はい、このケースでは「Exit While」が重複しています。しかし、ループを去った後に検索が行われたかどうかを知るには 'found'変数が必要です。 – potatoes

+1

元のコメントが正しくないので、私は削除しました。 Exit Whileが必要ですが、このようにはなりません。名前が 'System.IndexOutOfRangeException'例外と共に存在しない場合、ループは停止します。カウンタをテストし、配列の最後の項目がテストされた後にループを終了する必要があります。 –