标题:[经验]取20个在10到87之间中的随机整数(不包括10和87)
只看楼主
kx25
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2004-11-22
 问题点数:0 回复次数:14 
[经验]取20个在10到87之间中的随机整数(不包括10和87)


'取20个在10到87之间中的随机数(不包括10和87)

'本例子需要1个ListBox控件和1个commandButton控件

Private Sub command1_click()
Dim I As Integer
Dim J As Integer
Dim A As Integer

List1.Clear

Do

A = Fix(Rnd(1) * 87)

If A > 10 Then
If A < 87 Then
List1.AddItem A
J = J + 1
End If
End If

Loop While J < 20

End Sub


上面的的确有问题 这样可能会出现重复的数字
======================================
谢谢各位的发言,已经改进了,如下:

Private Sub command1_click()
Dim I As Integer
Dim J As Integer

Dim 随机整数 As Integer
Dim 重复 As String
Dim 数组(20) As Integer

List1.Clear

Do

随机整数 = Fix(Rnd(1) * 87)

If 随机整数 > 10 Then
If 随机整数 < 87 Then

重复 = "否"

If J > 1 Then
For I = 1 To J
If 随机整数 = 数组(I) Then 重复 = "是"
Next
End If

If 重复 = "否" Then
List1.AddItem 随机整数
J = J + 1
数组(J) = 随机整数
End If

End If
End If

Loop While J < 20

End Sub


==============尝试做成模块,在9楼================

[此贴子已经被作者于2007-5-11 5:37:55编辑过]

搜索更多相关主题的帖子: 整数 随机 Integer 经验 Dim 
2007-05-09 23:44
qq_791
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2006-1-10
得分:0 
对的

2007-05-09 23:48
Kendy123456
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:62
帖 子:2720
专家分:0
注 册:2007-1-3
得分:0 

有问题 这样可能会出现重复的数字


2007-05-10 09:46
qq_791
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2006-1-10
得分:0 
那要怎么修改呢?

2007-05-10 11:38
qq_791
Rank: 1
等 级:新手上路
帖 子:74
专家分:0
注 册:2006-1-10
得分:0 
好象是的,刚才我用VB验证了下,果然出现了重复的数。那要怎么修改呢?

2007-05-10 11:39
jaychang
Rank: 1
等 级:禁止访问
帖 子:148
专家分:0
注 册:2007-5-3
得分:0 

把取得的数保存到一个数组里,产生一个新的随机数的时候,就扫描数组,比较,如果没有相同的就保存;如果有相同的,就弃,重新产生随机数.


http://bbs.    编程GIS论坛
交流软件开发技术与GIS技术
2007-05-10 12:08
Kendy123456
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:62
帖 子:2720
专家分:0
注 册:2007-1-3
得分:0 
哪里还需要什么数值 List的Item就是数组了. 其它同6楼. 取得随机数后先和前面的比 比到有相等就再取.

另外一个方法 你把11 到86 放进一个ListBox2 然后在ListBox2的Item的Count取随机数 取到后把这个数从ListBox2踢出去 这样就不会有重复

2007-05-10 12:20
jaychang
Rank: 1
等 级:禁止访问
帖 子:148
专家分:0
注 册:2007-5-3
得分:0 
嘿嘿...我先学过C语言,在C语言里,很强调使用数组..所以对数组比较有感情...遇到问题就想到它了

http://bbs.    编程GIS论坛
交流软件开发技术与GIS技术
2007-05-10 12:25
kx25
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2004-11-22
得分:0 

试着做成了模块,方便以后用: 获取随机整数(最小值 As Integer, 最大值 As Integer, 随机数量 As Integer)


模块的内容如下:

Public 随机整数() As Long '数据输出,从 随机整数(1) 开始记录
Public 随机数量 As Long '可以去掉,但是在过程中要弄个常数变量来代替,比如:
'Dim A As Integer
'A = 获取随机整数(0, 100, 100)

'====================================================
Public Function 获取随机整数(最小值 As Long, 最大值 As Long, 随机数量 As Long)
Dim I As Long
Dim J As Long
Dim 范围 As Long
Dim 选中() As String
Dim 最小值为零 As String
ReDim Preserve 随机整数(1 To 1000) As Long

'====================================================
If 最小值 < 0 Then
MsgBox "嘿嘿,不支持负数 !"
Exit Function
End If
'====================================================
If 最小值 = 0 Then
最小值 = 最小值 + 1
最大值 = 最大值 + 1
最小值为零 = "是"
End If
'====================================================
If 最小值 > 最大值 Then
MsgBox "嘿嘿,最大值怎能比最小值还小 !"
Exit Function
End If
'====================================================
范围 = 最大值 - 最小值 + 1
If 范围 < 随机数量 Then
MsgBox "范围 = 最大值 - 最小值 + 1 = " & 范围 & " 获取随机整数的数量 " & 随机数量 & " 超出范围 !"
Exit Function
End If
'====================================================
If 随机数量 < 1 Then
MsgBox "嘿嘿,获取随机整数的 数量 至少要等于1 !"
Exit Function
End If
'====================================================

ReDim Preserve 选中(最小值 To 最大值) As String
ReDim Preserve 随机整数(1 To 随机数量) As Long

For I = 1 To 随机数量
随机整数(I) = 0
Next
'====================================================
Do
获取随机整数 = Fix(Rnd(1) * 最大值)

If 获取随机整数 >= 最小值 Then
If 获取随机整数 <= 最大值 Then
If 选中(获取随机整数) <> "是" Then
选中(获取随机整数) = "是"
J = J + 1
随机整数(J) = 获取随机整数
If 选中(最大值) = "是" Then 最大值 = 最大值 - 1
End If
End If

End If

If J < 随机数量 Then

获取随机整数 = Int(Rnd(1) * 范围) + 最小值

If 获取随机整数 >= 最小值 Then
If 获取随机整数 <= 最大值 Then
If 选中(获取随机整数) <> "是" Then
选中(获取随机整数) = "是"
J = J + 1
随机整数(J) = 获取随机整数
If 选中(范围) = "是" Then 范围 = 范围 - 1
End If
End If
End If

End If

Loop While J < 随机数量
'====================================================

If 最小值为零 = "是" Then
J = 0
Do
J = J + 1
随机整数(J) = 随机整数(J) - 1
Loop While J < 随机数量
End If
获取随机整数 = 随机数量
End Function



'=======================================调用方法===========================================
'=======================================调用方法===========================================

Private Sub Command1_Click()


随机数量 = 获取随机整数(1, 10, 10)
'获取随机整数(最小值 As Integer, 最大值 As Integer, 随机数量 As Integer)

List1.Clear

For I = 1 To 随机数量
List1.AddItem 随机整数(I) '要从 随机整数(1) 开始
Next

End Sub

[此贴子已经被作者于2007-5-13 9:41:38编辑过]


菜鸟在渐渐变老,终有一天会成为老鸟, 并为自由翱翔作最后的准备!
2007-05-11 04:50
jaychang
Rank: 1
等 级:禁止访问
帖 子:148
专家分:0
注 册:2007-5-3
得分:0 

嗯,做得不错,但是楼主有没有想过这样一个问题,比如我有1-10十个,我要从这十个数里产生随机十个随机数,就是说,产生随机的顺序....这个时候你又怎么做呢?

欢迎交流!


http://bbs.    编程GIS论坛
交流软件开发技术与GIS技术
2007-05-11 12:30



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-138065-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.297871 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved