在课堂上我需要一些帮助。我正在尝试创建一个必须具有循环的随机猜数字游戏。基本上,您输入一个数字作为猜测,程序将显示一条消息,告诉您该猜测是太高,太低还是正确,并且它将循环显示,直到您获得正确的猜测为止。该程序还会计算您所做的猜测。
这是表格:
这是我到目前为止的代码:
Private Sub btnDisplay_Click(sender As Object, e As EventArgs) Handles btnDisplay.Click
Dim decNumber As Decimal
Dim rand As New Random
Dim decGuess As Decimal
Dim intCount As Integer = 0
decGuess = CDec(txtGuess.Text)
Do
decNumber = rand.Next(1, 100)
intCount += 1
lblCount.Text = intCount.ToString
If decNumber < decGuess Then
lblResponse.Text = "Too low, try again."
ElseIf decNumber > decGuess Then
lblResponse.Text = "Too high, try again."
ElseIf decNumber = decGuess Then
lblResponse.Text = "Correct."
End If
Loop Until decGuess = decNumber
End Sub
我不太清楚代码中的错误是什么,但是每当我点击“显示”时,猜测计数就是一个很高的数字,标签上显示的消息始终只是“正确”。所以我的问题是我该如何解决并正确编写循环?
更新:
Public Class Form1
Dim intNumber As Integer
Dim rand As New Random
Dim intGuess As Integer
Dim intCount As Integer
Private Sub btnNew_Click_1(sender As Object, e As EventArgs)
lblResponse.Text = String.Empty
txtGuess.Clear()
lblCount.Text = String.Empty
intNumber = rand.Next(1, 100)
End Sub
Private Sub btnGuess_Click(sender As Object, e As EventArgs) Handles btnGuess.Click
intGuess = CInt(txtGuess.Text)
If intNumber < intGuess Then
lblResponse.Text = "Too high, try again."
ElseIf intNumber > intGuess Then
lblResponse.Text = "Too low, try again."
ElseIf intNumber = intGuess Then
lblResponse.Text = "Correct."
End If
intCount += 1
lblCount.Text = intCount.ToString
End Sub
答案 0 :(得分:2)
您的代码有很多错误:
1。您的随机数的定义
您将在每个循环中生成随机数,这意味着该数字在变化,而不是您尝试猜测的是一个固定数字。
即使您在循环外定义随机数,每次单击按钮时数字也会更改。
您将需要在子例程外部将其定义为全局变量,并且仅在按下重置按钮时才能对其进行更改
2。 intcount的定义
每次单击按钮时,intcount都设置为0,因为它是在按钮单击子例程中定义的,我认为这是不希望的。
3。您正在使用循环的事实
您根本不需要循环。除非您希望程序每次进入按钮都进入无限循环而崩溃并且猜测不正确,否则应该删除循环并仅使用其中的代码。
4。使用了错误的数据类型
decnumber应该是一个整数,因为random.next()返回一个整数值(您也可以将其重命名为ToGuess)
decGuess = CDec(textGuess.Text)
应该是
decGuess = CInt(textGuess.Text)
由于您输入的是小数,因此永远无法猜出数字
程序始终输出“正确”的原因是,计算机没有通过更改猜测来使它与随机数相同,而是通过更改随机数来“猜测”您的猜测,以使其最终变为您的猜测,每次都会增加猜测的数量。
更新:
您的新按钮不起作用的原因是它无法处理其单击。假设您已经调用了新按钮btnNew
,请尝试替换:
Private Sub btnNew_Click_1(sender As Object, e As EventArgs)
具有:
Private Sub btnNew_Click_1(sender As Object, e As EventArgs) Handles btnNew.Click
下一次为按钮添加子例程时,请尝试在Visual Studio的设计视图中双击该按钮。这将自动生成click子例程。
您遇到的另一个问题是,在加载表单时尚未生成随机数。要解决此问题,请在设计器视图中双击您的表单以生成加载子例程,然后以编程方式按下按钮
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
btnNew.PerformClick()
End Sub
还要感谢jimi的评论,切记在按btnNew时将intCount
设置为0