首页 新闻 会员 周边

关于vb.net随机数生成问题

0
悬赏园豆:10 [已解决问题] 解决于 2014-10-13 15:23

我的程序是这样的

Const STRINGSOURCE = "0123456789abcdefghijklmnopqrstuvwxyz"

 

'随机字符串生成,lngNum:随机数生成的长度
Public Shared Function generateRndString(ByVal lngNum As Long) As String
Dim rndString As String = String.Empty
If lngNum <= 0 Then
Return rndString
End If

Dim i As Long
Dim intLength As Integer
intLength = Len(STRINGSOURCE) - 1

For i = 1 To lngNum

rndString = rndString & Mid(STRINGSOURCE, Int(Rnd() * intLength + 1), 1)
Next

Return rndString
End Function

 

这个为什么每次重新启动VS再次调用函数生成的第一个函数随机数都是一样的?

易之名的主页 易之名 | 初学一级 | 园豆:103
提问于:2014-10-13 11:55
< >
分享
最佳答案
0

用实例说明吧。。
Private Sub Command1_Click()
Print Int(Rnd * 10)
End Sub
你运行下 3次就好~比如得出3个随机数结果为 7 7 5 你关闭程序 再次运行 它还是7 7 5
Private Sub Command1_Click()
Randomize
Print Int(Rnd * 10)
End Sub
而有加随机种子randomize 的话你关闭再运行 出来的结果就不一样了 就不是 7 7 5 就可能是 5 5 6 或者其他

收获园豆:10
爱编程的大叔 | 高人七级 |园豆:30839 | 2014-10-13 12:00

我这样也试了,但我运行32次8位的随机数就会重复,这是什么原因?

易之名 | 园豆:103 (初学一级) | 2014-10-13 12:08

@易之名: 我的意思是你得看看为什么会重复,这是因为种子的问题,如果你想不重复。

反正以后编程的时间还长,你去把这事搞清楚,并不需要太多时间的。

另外,你弄这么麻烦就为了一个随机字符串,不如直接使用GUID,也是数字和字母的组合。

36个字符,你要是嫌太长,就弄短一些好了。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-10-13 12:13

@爱编程的大叔: System.Guid.NewGuid.ToString就是这么写吗?

易之名 | 园豆:103 (初学一级) | 2014-10-13 12:30

@易之名: randomize是有两个重载方法的,其中一个是randomize(number as Double),

你提供不同的number就可以再将重复的概率降低了。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-10-13 12:40

@易之名: 我是想将生成随机数作为数据库中的主KEY

易之名 | 园豆:103 (初学一级) | 2014-10-13 12:40

@易之名: 你不知道SQL SERVER支持GUID当主键的吗?而且数据库直接支持自动生成的。

爱编程的大叔 | 园豆:30839 (高人七级) | 2014-10-13 16:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册