注册 登录
编程论坛 VB6论坛

有个低级问题想请教

liujunzhi911 发布于 2013-09-26 13:55, 317 次点击
Private Sub Form_Click()
Dim a(10) As Integer, i As Integer
Randomize
i = 0
Do
num = Int(Rnd * 90) + 10
For j = 1 To i
If num = a(j) Then
Exit For
End If
Next j
If j > i Then
i = i + 1
a(i) = num
End If
Loop While i < 10
For i = 1 To 9
For j = i + 1 To 9
If a(i) > a(j) Then temp = a(i): a(i) = a(j): a(j) = temp
Next j
Next i
For i = 1 To 10
Print a(i)
Next i
End Sub
这是个随机数生成并排序的代码,然而有一句怎么读都读不懂
Do
num = Int(Rnd * 90) + 10
For j = 1 To i
If num = a(j) Then
Exit For
End If
Next j
If j > i Then
i = i + 1
a(i) = num
End If
Loop While i < 10
这句中按第一次运行可以得出a(1)的值,而当第二次循环时发现 if J>i Then后面的运行是不可行的,因此应该不能进行i的递增,也就应该成为死循环了。但在VB中运行时却可以进行循环,这个问题请各位大神指点下。本人新手多多指教
 
3 回复
#2
风吹过b2013-09-26 14:23
i = 0                             'I开始为零
Do                                '循环开始
num = Int(Rnd * 90) + 10          '产生10-99 的随机数
For j = 1 To i                    '查找已产生的数据
If num = a(j) Then                '刚产生的数据等于已产生的数据
Exit For                          '退出循环
End If
Next j                            'for 循环结束
If j > i Then                     '是否是正常退出循环,当正常退出循环时,J=i+1;exit for 退出时,J<i
i = i + 1                         '正常退出时,计数累计 1,也就是DO 循环里再产生下一个随机数
a(i) = num                        '保存刚产生的数据,放到已产生的数据里去
End If
Loop While i < 10                 '没有产生10个数之前就继续DO循环

你调试时,不能单步,只能在 i=i+1 这行下断点。
#3
liujunzhi9112013-09-26 14:56
回复 2楼 风吹过b
正常退出for时不是初值等于终值的吗,为什么j=i+1求指点下
#4
liujunzhi9112013-09-26 15:01
回复 2楼 风吹过b
哦好像明白了,判段for循环后步长还加了1然后判断正常退出for,我忘了谢谢了
1