-
按键精灵脚本开发教程:随机数写法
来源:按键学院
【按键精灵】
小编今天要分享三种随机数不重复的方法
~
快来围观
~
常规方法
将随机到的数字放到数组里,
然后每次随机产生的数字都和数组里已有的数字进行比较,
如
果有重复的则重新生成。
代码:
(生成
10
个范围在
10
以内的随机数)<
/p>
Dim TmpDat(10)
For i = 0 To 9
Randomize
TmpRnd =
Int(rnd * 10)
For j = 0 To i
- 1
If TmpDat(
j)=TmpRnd Then
i = i - 1 : TmpBol = TRUE
End
If
Next
If TmpBol Then
TmpBol = False Else TmpDat(i) = TmpRnd :
TracePrint TmpRnd
Next
分析:
1
、
Dim TmpDat(10)
//
例如,需要产生
10
个不重复的数
字,则定义数组,数组元素个数
为
10
2
、
For
i = 0 To 9//
由于数组的最小下标是从
0
开始的,所以循环从
0
开始到
< br>9,
循环
10
次
3
、
Randomize
//
随机函数初始化
4
、
TmpRnd =
Int(rnd * 10) //
我们生成
0-10
范围内的数字,便于查看效果
5
、
For j = 0 To i
- 1
//
再做一次循环,将当前生成的随机数与前面生成的随机数一
一进
行比较。
例如:
i=5
,
说明之前已经执行过
5
次,
数组
T
mpDat
里已经有了
5
个元素,它们
的下标从
0-4
。
当我们想要查看当前随机到的数字有没有重复,就需要和前面的产生的随机数进行比较。
所以从
0
循环到
i-1 ( i
自身就不需要和自身比了,所以这里需要减
1
,排除自身
)
。
6
、
If
TmpDat(
j)=TmpRnd
Then//
如果生成的随机数在数组里已经存在
i = i - 1 : TmpBol = TRU
E//
则
i
的值减去
< br>1
,并且做一个标记,
tmpbol
设置为
true
End
If
7
、
If TmpBol Then
TmpBol = False Else TmpDat(i) = TmpRnd :
TracePrint TmpRnd
//
如果
TmpBol
是真的,说明
随机数字重复了,不做赋值判断,将
tmpbol
的赋值假。<
/p>
如果
TmpBol
< br>不是真的,说明随机数字没有重复,将新产生的随机数赋值给数组,并且输
出。<
/p>
输出:
点评:
★★
方法是好的,
但是效率上有所欠佳。
每次生成一次随机数都需要和已有数据一一比较,<
/p>
比较耗费时间
数组法
前面的常规法,只定义了一个数组用来存放随机数。
而数组法,
要定义两个数组。
一个数组用来存放随机数,
你需要生成多少个随机数则定义多
大范围的数组。
另一个数组是用来判断随机数
之前是否产生过,
你要生成多大范围的随机数,
则定义多大的<
/p>
数组范围。
代码:
(生成
10
个范围在
1000
内的随机数)
Dim TmpDat(10)
Dim TmpArr(1000)//
生成的随机数大小范围
在
0~1000
For i = 0 To 9
Randomize
TmpRnd =
Int(rnd * 1000)
If
TmpArr(TmpRnd) Then
i =
i - 1 : TmpBol = TRUE
Else
TmpArr(TmpRnd) = True
-
-
-
-
-
-
-
-
-
上一篇:C物品库存管理
下一篇:随机数生成算法的研究