您的位置:程序门 -> vb -> 基础类



枚举产生数列的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


枚举产生数列的问题[已结贴,结贴人:untest]
发表于:2008-01-08 10:15:38 楼主
有以下一个问题,从1到n枚举,举例如下:当textbox1输入5时,即n=5,则textbox2输出结果并分行显示
本人很菜,我的代码如下
dim   k   as   integer
for   k   =   1   to   textbox1.text
textbox2.text=   textbox2   &   i   &   vbcrlf
不过发现上述代码在textbox2中输出结果时,当n> 1000左右时,就明显感觉textbox2输出结果的时间很慢,并且容易程序假死,
请问各位大侠,有没有其他方法比上述代码稳定而且更快的吗?谢谢!
发表于:2008-01-08 10:17:131楼 得分:0
代码多贴些?
发表于:2008-01-08 10:21:592楼 得分:0
引用我的原贴
"有以下一个问题,从1到n枚举,举例如下:当textbox1输入5时,即n=5,则textbox2输出结果并分行显示
本人很菜,我的代码如下
dim       k       as       integer
for       k       =       1       to       textbox1.text
textbox2.text=       textbox2       &       i       &       vbcrlf
不过发现上述代码在textbox2中输出结果时,当n>   1000左右时,就明显感觉textbox2输出结果的时间很慢,并且容易程序假死,
请问各位大侠,有没有其他方法比上述代码稳定而且更快的吗?谢谢!"

更改如下:
当textbox1输入5时,即n=5,则textbox2输出结果为
1
2
3
4
5
当textbox1输入10时,即n=10,则textbox2输出结果为
1
2
3
4
5
6
7
8
9
10
以此类推

本人很菜,我的代码如下
dim       k       as       integer
for       k       =       1       to       textbox1.text
textbox2.text=       textbox2       &       i       &       vbcrlf
不过发现上述代码在textbox2中输出结果时,当n>   1000左右时,就明显感觉textbox2输出结果的时间很慢,并且容易程序假死,
请问各位大侠,有没有其他方法比上述代码稳定而且更快的吗?谢谢!
发表于:2008-01-08 10:48:153楼 得分:2
在你的for循环   中加上doevents就好了
发表于:2008-01-08 10:50:504楼 得分:2
还有一点把dim       k       as       integer  
改为dim       k       as       long   ,因为数字比较大的话会出错,integer   型越界了。
发表于:2008-01-08 11:03:255楼 得分:0
的确解决了假死的问题,不过代码产生数列的速度还是很慢,当n> 1000时,谢谢
发表于:2008-01-08 11:08:566楼 得分:6
记得以前网上看过,属性比变量慢很多,如果不要求每个数字的输出都显示的话,可以定义一个字符串,然后
j=val(text1.text)
for   k   =   1   to   j'数大的话,取text比取变量慢多
stra=stra   &   i   &   vbcrlf  

最后text1.text=stra
发表于:2008-01-08 11:13:557楼 得分:10
拼接字符串当然慢
给你个思路,用数组,然后join给text2赋值
代码简单,不写了
发表于:2008-01-08 12:06:258楼 得分:0
感谢各位大侠,7楼的最快,integer的确容易出错
发表于:2008-01-09 19:51:069楼 得分:0
dim       k       as       integer  
for       k       =       1       to       textbox1.text  
textbox2.text=       textbox2       &       i       &       vbcrlf

改成:
dim       k       as       integer  
dim   s   as   string
for       k       =       1       to       val(textbox1.text   )
s=       s       &       i       &       vbcrlf
...
next
text2.text=s
就可以了。
你前面的代码有几个明显的不当之处:
k       =       1       to       textbox1.text  
这算什么写法?textbox1.text明显是个字符串变量,或许vb会帮你自动转换一下类型,但你就能保证别人再text1里面输入的时候就一定是个数字?

textbox2       &       i
这也有问题,虽然vb控件有默认属性,它会在不指定控件属性的时候按照默认属性来处理,但是这显然是非常不严谨的。

最后,也就是你的程序出问题的原因,是在于循环累加的速度很快的,textbox的显示刷新是无法更上这个速度的,并且即使可以跟上也没有一点意义,因为你也不可能看清楚,所以你的写法只是徒然得增加了程序的负担。因此我这里帮你改进一下,使用个字符串变量来存放中间结果,只在最后把结果显示再text2里面就可以了。速度会提高很多。


快速检索

最新资讯
热门点击