基本上我有一个数组A = Array(1, 2, 3, 4, 5)
我想要做的是,使用Rnd()
,根据随机数的值圈出这个循环。
基本上从0 Mod 5
开始获取一个随机数。如果随机数小于0.5,那么我保持0 Mod 5
,但是如果随机数大于或等于0.5,那么我移动到1 Mod 5
,然后因为它被传递到下一阶段'它再次滚动',所以我向它传递一个新的随机数,看它是否可以到达2 Mod 5
。
我的目标是运行10,000次并在电子表格的A列中收集结果,然后绘制散点图以查看其工作原理。
现在我创建了一个函数
Function looper(R, i)
If R < 0.5 Then
j = i
Else
j = i + 1
End If
If j = i Then
Exit Function
Else
newR = Rnd()
j = looper(newR, j)
End If
End Function
加上子
Sub loopy()
A = Array(1, 2, 3, 4, 5)
Randomize
R = Rnd()
k = looper(R, 1)
Cells(1, 1).Value = A(k Mod 5)
但是它只返回值1。
我很确定我在做一些根本错误的事情,无论是我的逻辑,还是我试图将我的逻辑放入VBA代码。
答案 0 :(得分:1)
您是否正在尝试分析和/或破解在线轮盘逻辑? ;)
looper
功能旨在始终返回1
。 0.5
,你也会以递归方式调用函数 - 因此,用简单的话说,它会重复,直到新的随机数小于0.5
,如果是,则返回{{ 1}}。
1
的结果 - 在A栏中
它打印了它经过的阶段数
how many random numbers greater than 0.5 can I get in a row
答案 1 :(得分:0)
好的,所以我改变了我的功能
Function looper(i)
R = Rnd()
If R < 0.5 Then
looper = i
Else
looper = i + 1
End If
End Function
并改变了我的潜艇
Sub loopy()
A = Array(1, 2, 3, 4, 5)
Cells(1, 1).Value = "Number"
For i = 2 To 10001
k = 1
j = 1
While k = j
j = looper(k)
k = k + 1
Wend
Cells(i, 1).Value = A(j Mod 5)
Next i
End Sub
这给了我想要的东西。我现在希望,一些明亮的火花可以让人想到一个更好的方法,不会涉及While
循环,我应该尽可能避免使用{{1}}循环。