标题:[经验]取20个在10到87之间中的随机整数(不包括10和87)
取消只看楼主
kx25
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2004-11-22
 问题点数:0 回复次数:4 
[经验]取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
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
kx25
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2004-11-22
得分:0 
以下是引用jaychang在2007-5-11 12:30:44的发言:

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

欢迎交流!

产生随机的顺序??????????

随机数是按生成数值的顺序依次赋值给数组的。。。难道产生随机数的顺序可以倒着来,不贴近现实呀

如果用模块,则窗体部分参考下面:

Private Sub Command1_Click()

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

List1.Clear

For I = 1 To 10
List1.AddItem 随机整数(I) '默认从 随机整数(1) 开始
Next

End Sub


[此贴子已经被作者于2007-5-12 16:44:52编辑过]


菜鸟在渐渐变老,终有一天会成为老鸟, 并为自由翱翔作最后的准备!
2007-05-12 16:39
kx25
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2004-11-22
得分:0 
以下是引用jaychang在2007-5-12 20:05:50的发言:

kx25,你好,

嘿嘿..你的这个方法有没有试过呢?
如果

调用 = 获取随机整数(1, 10, 10)

你会发现运行的时候,CPU占有率会是100%,计算机会很卡,还甚至有可能死机!

嘿嘿,的确没测试过“有多少个数字,就随机顺序挑出多少个来”。原先只是设想从N个数字中随机挑出部分而已。
根据你的想法,我再次修改了9楼里的模块,测试过了,没再遇到CPU占有率异常高的现象。

[attach]20824[/attach]

[此贴子已经被作者于2007-5-13 17:37:30编辑过]


菜鸟在渐渐变老,终有一天会成为老鸟, 并为自由翱翔作最后的准备!
2007-05-13 07:56
kx25
Rank: 1
等 级:新手上路
帖 子:31
专家分:0
注 册:2004-11-22
得分:0 

多谢jaychang


菜鸟在渐渐变老,终有一天会成为老鸟, 并为自由翱翔作最后的准备!
2007-05-13 17:58



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




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

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