如何结束Do ...直到循环

时间:2014-04-09 20:03:51

标签: vb.net loops

我正在学校制作课程而且我不知道如何结束Do...Until循环。我已经有一个程序,当点击一个按钮时,会出现一个输入框,要求输入密码。我当时想要发生的是,如果用户输入了错误的密码,显示的价格应该加倍,并再次提示他们输入密码。如果他们得到正确的密码,我希望程序退出。这就是我已经拥有的:

Public Class Form1

    Private Property userPassword As String

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim price = 100
        Dim realPassword = "hello"
        Do
            Dim userPassword = InputBox("Please enter the correct password to claim your money", "Claim Winnings")
            If userPassword = realPassword Then
                MsgBox("You owe us £" & price)
            Else
                MsgBox("Incorrect password entered. You now owe £" & price * 2)

            End If
        Loop Until userPassword = realPassword
    End Sub

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub

End Class

如果输入错误的密码,价格就不会上涨。

2 个答案:

答案 0 :(得分:2)

问题是你有一个属性以及一个名为userPassword的变量。

由于变量是在循环内部用...

定义的
Dim userPassword = InputBox(...)

...永远不会设置属性,变量的范围将仅限于循环块(循环内的语句)。因此,循环条件Loop Until userPassword = realPassword指的是从未设置过的属性!

修复:删除Dim

userPassword = InputBox(...) 'Now this sets the property
                             'instead of declaring a new variable

并且还会更改price

的值
price = 2 * price

price *= 2

您只显示双倍价格,但变量price永远不会更改!

在VB中用于使用大写字母和局部变量以及带小写字母的方法参数名称来启动属性名称。这有助于避免混淆。


注意:变量的范围,即VB已知的区域,是声明它的语句块

Dim k, x, y As Integer

IF x = y Then
    Dim i As Integer = 5
Else
    k = i ' Not possible since `i` is not known here!
End If

如果您想在循环中留下循环,可以使用Exit Do。如果您想完全保留该方法,可以使用Return执行此操作。但是没有必要在您的解决方案中使用它。我只是提到它,因为它是评论中讨论的主题。

Do
    DoSomething()
    If WeWantToExitNow Then
        Exit Do    ' Or "Return" if you want to leave the method here.
    End If
    DoSomethingElse()
Loop Until x = y

答案 1 :(得分:0)

使用userPassword<> realPassword

while语句将等到userPassword和realPassword相等,如果相等,则while语句将终止。