回 帖 发 新 帖 刷新版面

主题:一个判断两个数是否相等的问题!

Private Sub Command1_Click()
Dim a1 As Single
Dim i As Single
Dim b As String
Dim b1 As String
Dim b2 As String
Dim x As String

'初始化
b = ""
b1 = ""
b2 = ""

For i = 0 To 5 '循环6次,每次生成一个随即数
11:
a1 = Int((33 * Rnd) + 1)
b1 = a1

If StrComp(b1, b2, 0) = 0 Then '判断随机数不能相同
    GoTo 11
Else
    x = b1
End If


b2 = a1

Me.a(i).Text = x
Next


End Sub

我想生成6个随机数,已经实现了,另一个要求是这6个数不能重复,现在总是出现两个数重复,请大家帮忙看看为什么无法判断b1,b2是否相同,谢谢啊

回复列表 (共6个回复)

沙发

生成后,再回头比较,如果相同就重新再生成

板凳

里面那个if 就是判断b1,b2是否相同的,如果相同就执行goto 11,重新生成了,您看看这么写对吗
为什么没有效果

3 楼

这个问题前面有人问过了,你查一下看。

4 楼

是否是只判斷了相鄰的兩個數啊?

5 楼

生成后回头判断是否已存在完全没有效率~ 如果 10选9的话 越往后重复的可能性就越大 要执行的次数就会越多  你可以这样来求不重复的数:

dim p(1 to 10) as long
dim i as long 
dim k as long
dim k1 as long

for i=0 to ubound(p)
  p(i)=i
next
'上面先初始化 p(1)=1   p(2)=2 .... p(10)=10

比如你现在想随机取不重复的 9 个数则
for i=1 to 9
  k=Int((ubound(p) - i + 1) * Rnd + i)
  '上面 k 的取值范围是随机从 i 到 数组下标 的数
  '这样 i=1 时 就会随机 1-10  i=2 时就会随机 2=10
  
  k1=p(i)
  p(i)=p(k)
  p(k)=k1

  '比如 k=8 时 把 p(8) 和 p(1)换位置 
  '此时 p(1)=8  p(8)=1
  '这样 你就随机取了一个数 8
  '下次 i=2 时 会从 p(2)-p(10) 之间随机取
  '8 就不会再次被 选中了 而 1 也已经放到了 p(8) 里
  '也有被选中的可能 这样保证了每个数都有被选中的机会 而且不会重复
  '选 9 个数 也只循环 9 次而已 而不会重复 rnd 取随机数再判断  
next

6 楼

我認為用數組+遍歷不錯

我来回复

您尚未登录,请登录后再回复。点此登录或注册