为什么有时候do while循环会有空循环??
我就是不明白为什么有时候do 会出现空循环,打印出来就是几个相同 n 之后,还可以循环下去,为什么??比如后面结果就是出现几次2、3 。我的循环有什么问题?那位大哥有时间帮我看看阿!!!
简单的说循环为:
do while n < 常数
if 条件1 then
语句组1
n=n+1
endif
if 条件2 then
语句组2
n=n+1
endif
loop
类似的打印结果:
****n** 0
****n** 1
****n** 2
****n** 2
****n** 2
****n** 3
****n** 0
****n** 1
****n** 2
****n** 3
****n** 3
****n** 3
详细程序,循环如下
IntOut = 1
GpB(0) = 0
GpB(1) = 0
GpB(2) = 0
BoOut = False
tmp = 0
ListMain.Clear
For i = 1 To IntLs
For j = 0 To 2
IntLp = Val(Mid(StrLp, (j + 1), 1))
If IntLp <> 0 Then
IntX = Val(Mid(StrGp, (j + 1), 1))
If IntX = 2 Then
Bs = 13
Else
Bs = 10
End If
n = 0
Do
If IntLp > (Bs - (GpB(IntX) Mod Bs)) And (GpB(IntX) Mod IntLp) = 0 Then
For q = 0 To Bs
If Times(IntX, q) = IntOut - 1 And GroupB(IntX, q) <> 0 And n <= IntLp Then
GetBalls(IntX, q) = GroupB(IntX, q)
Times(IntX, q) = Times(IntX, q) + 1
GpB(IntX) = GpB(IntX) + 1
n = n + 1
BoOut = True
End If
Next q
If BoOut = True Then
IntOut = IntOut + 1
BoOut = False
End If
Else
IntY = GetRand(IntX)
If Times(IntX, IntY) < IntOut And GetBalls(IntX, IntY) = 0 Then
GetBalls(IntX, IntY) = GroupB(IntX, IntY)
Times(IntX, IntY) = Times(IntX, IntY) + 1
GpB(IntX) = GpB(IntX) + 1
n = n + 1
End If
End If
tmp = tmp + 1
If (tmp + n) > 2000 Then
Exit Sub
End If
Loop While n < IntLp
End If
Next j
StrList = "第" + Str(i) + "注 :"
For l = 0 To 2
IntX = Val(Mid(StrGp, (l + 1), 1))
For r = 0 To 12
If GetBalls(IntX, r) <> 0 Then
StrList = StrList + " " + Str(GetBalls(IntX, r))
GetBalls(IntX, r) = 0
End If
Next r
Next l
ListMain.AddItem (StrList)
Next i
简单的说循环为:
do while n < 常数
if 条件1 then
语句组1
n=n+1
endif
if 条件2 then
语句组2
n=n+1
endif
loop
类似的打印结果:
****n** 0
****n** 1
****n** 2
****n** 2
****n** 2
****n** 3
****n** 0
****n** 1
****n** 2
****n** 3
****n** 3
****n** 3
详细程序,循环如下
IntOut = 1
GpB(0) = 0
GpB(1) = 0
GpB(2) = 0
BoOut = False
tmp = 0
ListMain.Clear
For i = 1 To IntLs
For j = 0 To 2
IntLp = Val(Mid(StrLp, (j + 1), 1))
If IntLp <> 0 Then
IntX = Val(Mid(StrGp, (j + 1), 1))
If IntX = 2 Then
Bs = 13
Else
Bs = 10
End If
n = 0
Do
If IntLp > (Bs - (GpB(IntX) Mod Bs)) And (GpB(IntX) Mod IntLp) = 0 Then
For q = 0 To Bs
If Times(IntX, q) = IntOut - 1 And GroupB(IntX, q) <> 0 And n <= IntLp Then
GetBalls(IntX, q) = GroupB(IntX, q)
Times(IntX, q) = Times(IntX, q) + 1
GpB(IntX) = GpB(IntX) + 1
n = n + 1
BoOut = True
End If
Next q
If BoOut = True Then
IntOut = IntOut + 1
BoOut = False
End If
Else
IntY = GetRand(IntX)
If Times(IntX, IntY) < IntOut And GetBalls(IntX, IntY) = 0 Then
GetBalls(IntX, IntY) = GroupB(IntX, IntY)
Times(IntX, IntY) = Times(IntX, IntY) + 1
GpB(IntX) = GpB(IntX) + 1
n = n + 1
End If
End If
tmp = tmp + 1
If (tmp + n) > 2000 Then
Exit Sub
End If
Loop While n < IntLp
End If
Next j
StrList = "第" + Str(i) + "注 :"
For l = 0 To 2
IntX = Val(Mid(StrGp, (l + 1), 1))
For r = 0 To 12
If GetBalls(IntX, r) <> 0 Then
StrList = StrList + " " + Str(GetBalls(IntX, r))
GetBalls(IntX, r) = 0
End If
Next r
Next l
ListMain.AddItem (StrList)
Next i
...全文
请发表友善的回复…
发表回复
zou19820704 2005-12-27
- 打赏
- 举报
你在不断的改变n值,而n就是你循环的条件!
huteng 2005-12-27
- 打赏
- 举报
问题找到了,就是循环条件有问题,代码是比较乱,正在调试,谢谢大家
vbman2003 2005-12-27
- 打赏
- 举报
不理解楼主说的空循环是什么意思
可以按F8,单步调试,并debug.print相关值,找一下原因
可以按F8,单步调试,并debug.print相关值,找一下原因
celevantis 2005-12-27
- 打赏
- 举报
Do While condition
statements
Loop
当 Visual Basic 执行这个 Do 循环时会首先测试 condition。如果 condition 为 False(零),则跳过所有语句。如果 condition 为 True(非零),则 Visual Basic 执行语句,然后退回到 Do While 语句再测试条件。
statements
Loop
当 Visual Basic 执行这个 Do 循环时会首先测试 condition。如果 condition 为 False(零),则跳过所有语句。如果 condition 为 True(非零),则 Visual Basic 执行语句,然后退回到 Do While 语句再测试条件。
rainstormmaster 2005-12-26
- 打赏
- 举报
这个估计是出现了逻辑问题
你的代码太乱,你还是说说你要实现什么吧
你的代码太乱,你还是说说你要实现什么吧
huteng 2005-12-26
- 打赏
- 举报
解释一下 :
do
循环体
Loop While 条件
没关系,要求肯定是循环的
我就是想问怎么会有空循环出来?几次之后还能恢复循环?理论上应该没有啊
do
循环体
Loop While 条件
没关系,要求肯定是循环的
我就是想问怎么会有空循环出来?几次之后还能恢复循环?理论上应该没有啊
rainstormmaster 2005-12-26
- 打赏
- 举报
首先,你给出的代码不全,无法调试
第二,你在程序中使用的循环是:
do
循环体
Loop While 条件
这样的循环至少会循环一次,不会存在你说的一次也不执行的情况
第二,你在程序中使用的循环是:
do
循环体
Loop While 条件
这样的循环至少会循环一次,不会存在你说的一次也不执行的情况