我正在尝试创建一个会产生随机数的程序,你必须通过输入答案来猜测它。问题是它与正确的数字as shown不匹配。
物件: 2个标签,1个文本框,1个命令按钮
我的第一个代码:
Private Sub Command1_Click()
Dim Num, Random As Integer
Label2.Caption = ""
Num = Val(Text1.Text)
Randomize (Random)
Random = Val(Label1.Caption)
Label1.Caption = Int(10 * Rnd + 1)
For Num = 1 To Num
If Num = Random Then
Label2.Caption = "you won "
Else
End If
Next
End Sub
答案 0 :(得分:2)
你不需要那个for循环,它会检查每个数字,直到你猜到的数字。
Private Sub Command1_Click()
Dim Num, Random As Integer
Label2.Caption = ""
Num = Val(Text1.Text)
Randomize (Random)
Random = Val(Label1.Caption)
Label1.Caption = Int(10 * Rnd + 1)
If Num = Random Then
Label2.Caption = "you won "
Else
End If
End Sub
调试它
If Num = Random Then
Label2.Caption = "you won "
Else
Label2.Caption = "The number " & Num & " Does not equal " & Random
End If
答案 1 :(得分:0)
首先,当前代码将始终导致数字零是第一个“随机”生成的数字。其次,该公式将产生可预测的随机数序列。
这背后的问题是计算机并不聪明,也无法真正创建随机数,这就是为什么你需要用Randomize“播种”它们来“摇动”骰子并提出不同的数字。但是,如果你使用相同的数字随机化,它将产生完全相同的“随机”数字序列。
例如,如果您使用代码,它将始终生成以下数字序列:0,8,7,5 ...
这就是为什么你需要用随机数“种子”随机数!大声笑。但是你怎么得到一个随机数?从技术上讲,你不能,但你可以作弊。您可以执行Randomize (Timer)
或Randomize
,它将Timer作为参数,它所做的是“种子”随机数生成,自午夜起经过了几秒和几毫秒。因此,如果您单击按钮以每天在完全相同的秒和毫秒内猜测随机数,那么您将获得相同序列的随机数的唯一时间。
你可以通过添加日,月或年来尝试扩展这个理论 - 这将以指数方式扩展“种子”,你永远不会看到重复的随机数序列,但是这样做非常困难,因为一旦你开始玩大种子数你会遇到奇怪的问题,例如如果你将一个非常大的数字改为1,它仍会产生相同的随机数序列(在我的测试场景中,随机抽取5969992到5969995范围内的任何数字)将导致相同的随机数序列:9,8,6,6,1)。这可能是Randomize函数本身的限制。就个人而言,我认为不值得尝试超越定时器播种。
以下是您调整的代码,以生成更“随机”的数字序列:
Dim Num, Random As Integer
Label2.Caption = ""
Num = Val(Text1.Text)
Randomize
Label1.Caption = Int(10 * Rnd + 1)
Random = Val(Label1.Caption)
If Num = Random Then
Label2.Caption = "you won "
Else
Label2.Caption = "The number " & Num & " Does not equal " & Random
End If
答案 2 :(得分:0)
dim num, Random as integer
label2.caption =""
num = val(text1.text)
randomize
label1.caption = int((10 +1-1)*rnd+1)
random = val(label1.caption)
if num = random then
label2.caption ="you won"
else
label2.caption = "Try again"
end if