vb 里面把随机数放进数组,核心思路就是先声明数组,初始化随机数种子,然后通过循环语句逐个调用 Rnd 函数生成随机数,再赋值给数组每一个下标元素,这里说的 vb 一般指 VB6 或者 VBA,两者写法基本一致,很多新手容易踩两个坑,第一个是忘记调用 Randomize,导致每次运行程序生成的随机序列完全一样,第二个是数组下标定义错误,VB6 默认下标从 0 开始,如果习惯从 1 开始计数,需要提前修改或者在代码顶部写 Option Base 1,循环赋值的时候下标越界就会报错,还可以根据需求限定随机数范围,比如生成 1 到 100 之间整数随机数,使用 Int 函数对 Rnd 结果做取整处理,批量填充数组之后,还可以继续做排序 去重 遍历输出等后续操作。
基础原理说明
Rnd 函数本身生成的是大于等于 0 小于 1 的单精度小数,不能直接得到整数随机数,想要指定区间整数,通用公式是 Int ((上限 - 下限 + 1) Rnd + 下限)
Randomize 的作用是初始化随机种子,依靠系统时间作为种子,保证每次运行得到不一样的随机序列,如果省略 Randomize,每次启动程序,Rnd 输出的随机数列都是固定不变的。
完整代码示例 VB6 VBA 通用
Option Explicit
Sub 随机数填充数组()
Dim arr(1 To 10) As Integer
Dim i As Integer
Randomize
For i = 1 To 10
arr(i) = Int((100 - 1 + 1) Rnd + 1)
Next i
For i = 1 To 10
Debug.Print arr(i)
Next i
End Sub
不同需求实现要点
| 需求 | 实现方式 |
|---|---|
| 生成小数随机数存入数组 | 直接 arr (i)=Rnd,不需要 Int 取整 |
| 生成指定区间整数 | Int((max-min+1)*Rnd+min) |
| 动态数组随机填充 | Redim 重新定义数组大小,再循环赋值 |
| 不重复随机数存入数组 | 生成新随机数之后循环对比数组已有元素,重复就重新生成 |
详细操作步骤
第一步 新建标准模块,写入 Option Explicit 强制变量声明,方便排查错误
第二步 声明数组,确定数组维度,是一维数组还是多维数组,确定下标起始和元素总数
第三步 写 Randomize 语句,放在循环之前完成随机种子初始化
第四步 编写 For 循环,循环变量 i 从数组起始下标遍历到最大下标
第五步 在循环内部,调用 Rnd 生成随机数,按需用 Int 取整,赋值给 arr (i)
第六步 循环结束之后,可以增加遍历输出代码,在立即窗口或者窗体打印数组全部随机数,验证填充结果
第七步 如果需要不重复随机数,增加判断逻辑,新生成随机数和数组已有元素比对,重复就重新生成,直到不重复再存入数组
补充要点,如果是多维数组,比如二维数组,循环需要写成双层循环,外层循环控制行,内层循环控制列,分别给每一个位置填充随机数。动态数组场景,不能一开始就写死数组大小,可以先用 Dim arr () As Integer,后面 Redim arr (1 To n) 动态扩容,再执行随机数赋值。
【常见问题】
问题 1 vb 把随机数放进数组每次结果都一样是什么原因
回答 1 vb 把随机数放进数组每次结果一样,是因为代码没有写 Randomize 初始化随机种子,在循环前面添加 Randomize 就可以每次生成不同随机序列
问题 2 vb 把随机数放进数组提示下标越界怎么办
回答 2 vb 把随机数放进数组提示下标越界,一般是循环变量最大值超过数组定义的最大下标,检查数组定义的上下限,确认循环终止值和数组上限匹配
问题 3 vb 把随机数放进数组能不能实现不重复
回答 3 vb 把随机数放进数组可以实现不重复,生成随机数之后增加查重判断,和数组已有元素对比,重复就重新生成,再存入数组
【免责申明】
本文代码适用于 VB6 以及 VBA 环境,不同 VB 版本语法存在细微差别,代码仅作为编程学习参考,实际项目使用请自行测试,出现报错请结合开发环境调试。


