无法找出do-while和do-until循环

时间:2017-05-18 22:23:36

标签: vba excel-vba do-while excel

我遇到了以四种不同方式执行相同任务的问题(基本上是四个循环),它是生成随机数并将它们排序为偶数和奇数。我有具体的说明,这必须使用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

任何帮助将不胜感激!谢谢!

3 个答案:

答案 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;可能是你的问题。

请记住,这两个代码并不完全等效,因为第二个代码至少执行一次。