| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 802 人关注过本帖
标题:帮小弟翻译一下,实在是看不明白啊!
只看楼主 加入收藏
firyafir
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2009-7-3
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:3 
帮小弟翻译一下,实在是看不明白啊!
Function gen_key(digits)
'定义并初始化数组
    dim char_array(80)
    '初始化数字
    For i = 0 To 9
        char_array(i) = CStr(i)
    Next
    '初始化大写字母
    For i = 10 To 35
        char_array(i) = Chr(i + 55)
    Next
    '初始化小写字母
    For i = 36 To 61
        char_array(i) = Chr(i + 61)
    Next
    Randomize   '初始化随机数生成器。
    do while len(output) < digits
        num = char_array(Int((62 - 0 + 1) * Rnd + 0))
        output = output + num
    loop
'设置返回值
    gen_key    =    output
End Function
'把结果返回给浏览器
response.write "本实例生成的十三位随机字符串为:"
response.write "<center>"
response.write gen_key(13)
response.write "</center>"

看不懂的地方如下:
1、gen_key这里应该翻译成什么?怎么理解这个变量名的意思?
2、'定义并初始化数组
    dim char_array(80)
    这里为什么把数组定义为80,下边i的值最大才61啊,为什么不定义成61
3、do while len(output) < digits 这一句的意思是说当符合这一条件时执行,也就是说output最多为12个字节,当他为12个字节的时候再执行一次下边的代码,output的字节变变成了13个字节,然后不符合while后边的条件不再循环,执行loop后边的代码。请问这里的理解正确吗?
4、这也是我最不理解的地方:  num = char_array(Int((62 - 0 + 1) * Rnd + 0)) 这句这是这么理解的,因为在上边初始化的时候,已经对char_array(i)进行了赋值。所以这句的作用就是产生一个任意的大、小写字母或者数字。也就是说Int((62 - 0 + 1) * Rnd + 0里边的值的范畴为0-61.这句代码里边int函数的意思是返回括号里的数字的整数部分,后边就不怎么理解了,初步理解:*的意思是乘 Rnd函数是随机产生一个数字的意思int括号里边的参数是什么意思啊,为什么要写成这样一个表达式,为什么不直接写成63,这里62表示的是什么意思啊?还有后边的*rnd
是什么意思?+0又怎么理解?
5、最后一个问题就简单了点
response.write "本实例生成的十三位随机字符串为:"
response.write "<center>"
response.write gen_key(13)
response.write "</center>"
这四句代码可不可以写在一行里边
可能有些大哥看到这么多问题已经有些感到不耐烦了,我只好说抱歉了,出自一个文件里边,只好放在一起提问了,
如果大家实在没时间的话回答一个小弟就很感激了!!
为了方便大家看代码,我把有问题的地方都用红色标出来了,
搜索更多相关主题的帖子: 翻译 
2009-08-08 10:04
jackboy
Rank: 2
等 级:论坛游民
帖 子:163
专家分:27
注 册:2005-10-9
收藏
得分:0 
function是数值传递类模快,而gen_key就是这个模快要传递的变量,所以这个gen_key也没什么特殊的含义,就是一个传递量。至于dim char_array(80)这个数组的定义我也认为是定义到61就可以了,do while len(output) < digits 这句话的意思你的理解是对的,do while循环的是条件满足循环,当条件不满足了就跳出循环了,num = char_array(Int((62 - 0 + 1) * Rnd + 0))这句话我感觉有点问题,好像里面的-0和+0根本就没有意义的,不过直接写成63也是不行的,rnd是随机产生一个0-1的随机数,而*62后就是随机产生0-62之间的一个数,然后再加上1就是产生1-63之间的数,再用int取整一下,就是随机产生1-62之间的一个整数,这个句子可以改成这样,num = char_array(Int(61 * Rnd + 1)),因为按照前面说的数组定义到61,所以这里随机产生的数字是61,如果是62的话上就超出上标了,至于那几句代码是可以写在一行里面的,用分隔符隔开就行了,不过为了美观还是建义换行

2009-08-09 08:40
firyafir
Rank: 1
等 级:新手上路
帖 子:24
专家分:0
注 册:2009-7-3
收藏
得分:0 
先谢谢仁兄!
rnd是随机产生一个0-1的随机数,
这个是问题的关键啊,我在VB帮助手册里边只看到说是随机产生一个数,没给出范围,害我想半天想不明白!
不过我还是有些地方不理解:
不过直接写成63也是不行的,rnd是随机产生一个0-1的随机数,而*62后就是随机产生0-62之间的一个数,然后再加上1就是产生1-63之间的数,
括号里边的计算结果是63,那怎么后边又变成了*62呢?(而*62后)还有这里“然后再加上1就是产生1-63之间的数,再用int取整一下,就是随机产生1-62之间的一个整数,”为什么不会产生63呢?是因为rnd产生的随机数是一个0-1之间的数,不包括0和1吗??
为什么num = char_array(Int((62 - 0 + 1
) * Rnd + 0))可以变成num = char_array(Int(61 * Rnd + 1)),这个是怎么计算出来的呢?62-0+1为什么等于61,还有这里不能直接写成63呢???
2009-08-09 11:18
jackboy
Rank: 2
等 级:论坛游民
帖 子:163
专家分:27
注 册:2005-10-9
收藏
得分:20 
是的,rnd产生的随机数是不包括0和1的,是产生在0-1这个区间,62-0+1为什么等于61,这儿不是等于61,而是等于62,+0是没有意义的,其实这句话的意思跟直接写成63的意思是一样的,其实你的程序意思是把ASC码转换成字母,所以用到的数组最大值是61,所以你只要把随机数的值从10-61也是可以的,就是num = char_array(Int(52 * Rnd + 10))就可以了,这样产生的区间就是10到61之的数了

2009-08-09 21:47
快速回复:帮小弟翻译一下,实在是看不明白啊!
数据加载中...
 
   



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

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