我遇到了以四种不同方式执行相同任务的问题(基本上是四个循环),它是生成随机数并将它们排序为偶数和奇数。我有具体的说明,这必须使用do while和do until循环,到目前为止,我设法只做四个中的一个。 第一个问题在于这里的循环不会运行,因为nch = ch已经运行并且它首先检查条件。有办法解决这个问题吗?退出条件不超过290次迭代或nch = ch。
Cells.Clear
Randomize
ch = 0
nch = 0
Worksheets("sheet2").Cells(1, 1) = "Do..Until Loop"
Worksheets("sheet2").Cells(1, 2) = "Even"
Worksheets("sheet2").Cells(1, 3) = "Odd"
Do Until (nch + ch) = 290 Or nch = ch
n = Fix((31 - 13 + 1) * Rnd) + 13
If n Mod 2 = 0 Then
ch = ch + 1
Worksheets("sheet2").Cells(1 + ch, 2) = n
Else
nch = nch + 1
Worksheets("sheet2").Cells(1 + nch, 3) = n
End If
Loop
第二个问题是使用do while循环,我必须达到相同的目标,但第一个条件因某种原因而被忽略。
Do
If n Mod 2 = 0 Then
ch = ch + 1
Worksheets("sheet2").Cells(1 + ch, 2) = n
Else
nch = nch + 1
Worksheets("sheet2").Cells(1 + nch, 3) = n
End If
Loop While (nch + ch) < 290 Or nch <> ch
任何帮助将不胜感激!谢谢!
答案 0 :(得分:2)
不确定是否必须将其写为&#39;循环播放&#39;为你的家庭工作。
但您可以将语法更改为。
Do While (nch + ch) < 290
n = Fix((31 - 13 + 1) * Rnd) + 13
If n Mod 2 = 0 Then
ch = ch + 1
Worksheets("sheet2").Cells(1 + ch, 2) = n
Else
nch = nch + 1
Worksheets("sheet2").Cells(1 + nch, 3) = n
End If
Loop
而你我不确定你的直到&#39;需要第二次检查,试试这个:
Cells.Clear
Randomize
ch = 0
nch = 0
Worksheets("sheet2").Cells(1, 1) = "Do..Until Loop"
Worksheets("sheet2").Cells(1, 2) = "Even"
Worksheets("sheet2").Cells(1, 3) = "Odd"
Cells.Clear
Randomize
ch = 0
nch = 0
Worksheets("sheet2").Cells(1, 1) = "Do..Until Loop"
Worksheets("sheet2").Cells(1, 2) = "Even"
Worksheets("sheet2").Cells(1, 3) = "Odd"
Do Until (nch + ch) = 290
n = Fix((31 - 13 + 1) * Rnd) + 13
If n Mod 2 = 0 Then
ch = ch + 1
Worksheets("sheet2").Cells(1 + ch, 2) = n
Else
nch = nch + 1
Worksheets("sheet2").Cells(1 + nch, 3) = n
End If
Loop
此外,它不是最干净的方法,但稍后检查一个标准,你可以用它来退出循环。
If ch = nch Then
Exit Do
End If
答案 1 :(得分:0)
如果添加布尔值来评估它
Cells.Clear
Randomize
ch = 0
nch = 0
equal = false
Worksheets("sheet2").Cells(1, 1) = "Do..Until Loop"
Worksheets("sheet2").Cells(1, 2) = "Even"
Worksheets("sheet2").Cells(1, 3) = "Odd"
Do Until (nch + ch) = 290 Or equal
n = Fix((31 - 13 + 1) * Rnd) + 13
If n Mod 2 = 0 Then
ch = ch + 1
Worksheets("sheet2").Cells(1 + ch, 2) = n
Else
nch = nch + 1
Worksheets("sheet2").Cells(1 + nch, 3) = n
End If
If nch = ch Then
equal = true
End If
Loop
第二个例子是n定义的?如果n = 0,则n Mod 2将等于0
答案 2 :(得分:0)
&#34;直到&#34;如果为真则停止,&#34;而#34;假的时候停止。
not ( (nch + ch) = 290 Or nch = ch )
是
(nch + ch) <> 290 AND nch <> ch
&#34;或&#34;可能是你的问题。
请记住,这两个代码并不完全等效,因为第二个代码至少执行一次。