2014-09-18 6 views
-1

Интересно, будет ли кто-нибудь настолько любезным, чтобы рассказать мне, почему мой код не работает. Отладка показывает, что значение может равняться 1 или 2, но VB будет выполнять только первый оператор while, а не второй.Почему мои петли While While работают правильно?

Const AnswerA As String = "Copenhagen" 
Const AnswerB As String = "Peter the Great" 
Dim Value As Integer 
Dim Message, Response As String 
Private Sub btnAskMe_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAskMe.Click 
    Randomize() 
    ' Generate random value between 1 and 2 to test only. 
    Value = CInt(Int((2 * Rnd()) + 1)) 
    If Value = 1 Then 
     Message = "What's the capital of Denmark?" 
     While Response <> AnswerA 
      Response = InputBox(Message) 
      If String.IsNullOrEmpty(Response) Then Exit Sub 
      If Response <> AnswerA Then Message = "No, no, no! Think boy, think?" 
     End While 
     MsgBox("Correct....What took you so long?") 
    End If 
    If Value = 2 Then 
     Message = "Which Russian Tsar forced his wife to keep her lovers head in a jar?" 
     While Response <> AnswerB 
      Response = InputBox(Message) 
      If String.IsNullOrEmpty(Response) Then Exit Sub 
      If Response <> AnswerB Then Message = "No you twerp! Have another go" 
     End While 
     MsgBox("Correct....What took you so long?") 
    End If 
End Sub 

End Class

+4

Готово ** НИКАКОЙ ** основной отладки, как проверка, если ваша функция на самом деле называется? Проверьте, какое значение находится в 'Value'? И точно, как вы ожидаете, что ваш код «Value = 2» будет запущен, если у вас есть «Exit Sub» прямо над ним? –

+0

Благодарим за отзыв. Я добавил Exit Sub, потому что я не хотел, чтобы VB выполнял оставшуюся часть скрипта, как только на первый вопрос был дан правильный ответ. Я надеялся, что если генератор придумает 2, тогда появится второй вопрос. Я новичок в VB, поэтому мои навыки отладки ограничены, хотя я пробовал Step Into. – RickTicky

+0

Step Into показывает, что Value может = 1 или = 2, но код будет работать только с первым ответом While While. Он никогда не переходит ко второму, даже если значение равно 2. Я был бы признателен за любые дальнейшие советы, которые вы могли бы предложить. – RickTicky

ответ

1

его проблема с вашим "конец, если" место здесь

If Value = 1 Then 
     Message = "What's the capital of Denmark?" 
    End If 

и здесь

If Value = 2 Then 
     Message = "Which Russian Tsar forced his wife to keep her lovers head in a jar?" 
    End If 

первый конец, если нужно прийти после строка «Exit Sub» , а вторая после «Конец Хотя»

+0

Согласовано, положив конец, если после выхода Sub Sub похоже на здравый смысл. Однако, когда я пытаюсь это сделать, мой первый оператор Else получает строку wiggly, и VB хочет, чтобы я добавил End IF. Между тем, конец IF, который я переместил, так как предложил, также получает строку wiggly, потому что она должна начинаться с IF. Есть идеи? – RickTicky

+0

сложно проверить ваш код. он не компилируется в ms access 2003, который использует несколько иной визуальный базовый диалект.i.e. чтобы отметить конец цикла while, он использует «конец», а не «конец while», как ваш. но мой совет заключался бы в том, чтобы поставить оба вопроса в одном и том же цикле, упростив ваш код и избавившись от конечного юга, тогда вы можете использовать «продолжить пока» в виде «exit sub». «continue while» пропускает остальную часть кода в цикл для текущей итерации и начать с новой итерации, чтобы он имел схожий эффект. удачи! –

+0

@ RickTicky - внесение изменений, которые предложили мне «называть морковь», не должно приводить к описанным вами ошибкам. Вы уверены, что задали 'End If', а не просто копировали его? Вы уверены, что переместили правильное выражение «Конец If»? Можете ли вы показать свой обновленный код? –

0

Он никогда не работать должным образом:

While ResponseB <> AnswerB 
        ^----check Response **B** 
     ResponseA = InputBox(Message) 
       ^---- get a response into Response **A** 
+0

Ahh..очень хорошо заметили. Большое спасибо Марку! Это, конечно, не помогает. Мне просто жаль, что я не знал, почему код застревает в первый раз и никогда не продвигается ко второму, даже если значение равно 2 – RickTicky

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