前几天听了米老师的课,才知道自己真的是学得都是似懂非懂,“一桶水不满,半桶水晃荡”这个比喻是最恰当不过了。
米老师经常告诉我们说要脚踏实地地学习,那何为脚踏实地呢?我的理解是把你在哪一方面不懂的知识学会就是脚踏实地,就比如说用VB产生10个随机数,我们看着好像会了,但没有真正地去实现过;或者说我们已经实现了,但没有去总结,当真正要用到的时候,却摸不着头脑,不知如何去做。
下面分别用VB编程来实现这一过程:
【一】
Dim a(9) As Integer,i As Integer,j As Integer '定义数组及循环变量 Dim temp As Integer '定义一个临时变量存储生成的随机数 Dim flag As Integer '定义一个变量来给数组元素做标记 Private Sub Form_Click() Randomize '初始化随机数发生器 For i = 0 To 9 '外循环,用来生成10个随机数和将满足条件的这10个随机数由if条件判断后输出 temp = Int(Rnd * 100 + 1) '生成一个0~100中的随机数存放在temp中 flag = False '假设此时的重复标识为false(不重复) For j = 0 To i - 1 '内循环,用来筛选外循环生成的随机数是否和已存入数组的任何一个元素重复 If temp = a(j) Then i = i - 1 '如果重复,则通过将循环变量减1来退回到上一个循环 flag = True '假设重复标识设置为true(重复) Exit For '由于在数组中已经存在这次循环所生成的数,于是废掉这个数,放弃这次循环 End If Next j If flag = False Then a(i) = temp '如果标识不再重复,那当前的随机数满足条件,将这个数存入数组 If i = 9 Then Print a(i) & Chr(13) & Chr(10) Else Print a(i); End If End If Next i End Sub
这段编程的简要思想是:
由外循环产生随机数,然后进入内循环,判断随机数是否与数组中已有元素重复,如果重复,就取消该次循环,再次进行内循环;如果不重复,就将这个符合条件的数赋值给对应的数组元素。最后,由外循环将符合条件的数在窗体上显示出来。
【二】
Option Explicit Dim a(9) As Integer,j As Integer Private Sub Form_Click() For i = 0 To 9 a(i) = Int(Rnd() * 100 + 1) For j = 0 To i - 1 If a(i) = a(j) Then i = i - 1 Exit For End If Next j Next i For j = 0 To 9 If j = 9 Then Print a(j); Chr(13) Else Print a(j),End If Next j End Sub
这个编程是直接把生成的随机数存进数组,然后再进行比较已经存在于数组中的每一个元素,判断有无相同的;而上一个算法是产生一个数,判断是否与数组里的元素存在重复现象,再将这个数存入数组。
当然,如果想生成更小或更大的随机数,则需要通过表达式实现,因为rnd函数产生的是【0,1)区间内的Single类型数据。如:
生成【0,x)区间的随机Singler类型数据,使用表达式rnd*x;
生成【m,n)区间的随机Singler类型数据,使用表达式m+rnd*(n-m)
生成【m,n】区间的随机整数,使用表达式m+int(rnd*(n-m+1))
之前也曾经做过这样的题,但太久没有做又不会了,这是什么原因呢?我想都是没有好好总结、没有脚踏实地地去做好每一件事情的原因。虽然当时照着源代码敲能实现出来,但没有自己去想、去实践,这都是自欺欺人的后果,还有待改善。
原文链接:https://www.f2er.com/vb/258823.html