VBA,大神们帮忙看下为什么产生的两组随机数相同呢。

[复制链接]
查看11 | 回复2 | 2013-1-25 12:47:35 | 显示全部楼层 |阅读模式
1、首先,Randomize 只需要用一次就可以了。而且要在产生随机数前调用。你上面的代码,先产生
随机数然后再初始化随机数函数,这样是不行的。 2、其次,你这个代码产生随机序列相同的原因跟 Randomize 没有任何关系。原因在于你两个产生随机
数的 DO循环里面都是这样给数组 Arr2 赋值的,Arr2(Temp1, i) = a。而Temp1的范围都是一样的,
所以你第二次循环里面就把第一次产生的数给覆盖掉了。
3、解决办法:
一、在每个循环结束后马上使用随机数,即第一个循环结束后马上用
Range(Cells(2, 1), Cells(14, 15000)) = Arr2 然后再产生新的随机数。
二、再定义一个数组,把两次产生的随机数放到不同数组中。
三、扩大数组第一维的范围,并且使两个Arr2(Temp1, i) = a 中Temp1的值值不一样。追问第一种方法可以,但是我如果想产生n组的话,如何改比较简单。 回答后面两种不行吗?Do Until UBound(Arr1)0
Temp1 = Temp1 + 1
a = Arr1(Int(Rnd * (UBound(Arr1, 1) + 1)))
Arr1 = Filter(Arr1, a, False)
Arr2(Temp1, i) = a
Loop
i = i + 1
Arr1 = Array( 1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,12 ,13 )
Temp1 = 0 ‘把这句话去掉,即让下面产生的随机数跟在上面的后面而不是覆盖。当然定义的范围你自己改。具体就是 temp1 在[1,13]里面放的第一组随机数, 在[14,26]里面放的是第二组随机数。其实你要产生多少组就定义多少个数组这样更简单容易理解点
Do Until UBound(Arr1)0
Temp1 = Temp1 + 1
a = Arr1(Int(Rnd * (UBound(Arr1, 1) + 1)))
Arr1 = Filter(Arr1, a, False)
Arr2(Temp1, i) = a
LoopNext |评论
回复

使用道具 举报

千问 | 2013-1-25 12:47:35 | 显示全部楼层
没仔细看你的代码,但是根据你的程序流程来看,第一次输出Arr2和第二次输出ARR2之间的间隔没有任何对数组变更的操作,所以你输出的数据不会有变化。追问如何初始化随机器使产生的两组随机数不同呢。 |评论
回复

使用道具 举报

千问 | 2013-1-25 12:47:35 | 显示全部楼层
嗯,不知道你的两组数是什么意思,但是你最后面的赋值你认为是正确的吗?EXECL那有那么多列?最后的结果是不是像下图这样?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行