我正在学校制作课程而且我不知道如何结束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
如果输入错误的密码,价格就不会上涨。
答案 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语句将终止。