2017-05-18 133 views
2

我遇到了与我必须以四种不同方式执行相同的任务(四个循环,基本上)的麻烦,它会生成随机数并将它们分类为偶数和奇数。我有具体的指示,这必须使用做,直到循环做,到目前为止,我只设法做四个之一。 第一个问题是,这里的循环不会运行,因为nch = ch已经存在,它首先检查条件。有没有办法解决这个问题?退出条件不超过290次迭代或nch = ch。找不到do-while和do-until循环

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

当While循环为(nch + ch)<290且nch <> ch'(即只有在两个条件都为“真”时才继续)。但是我不知道你对第一个项目会有什么期望 - 正如你所说的那样,在开始的时候,和evens的赔率几乎相同,即每个赔率为零,所以如果你打算一旦拥有相同的数字,那么你根本不应该经历循环。 (这是你的代码在做什么 - 也许老师期待这种情况。) – YowE3K

+0

是的,问题是我会以另一种方式做到这一点,但老师特别告诉我们,退出条件应该是直到用逻辑运算符写出来。我在质疑循环中实际做到这一点的可能性。循环同时工作!谢谢! – DenizKutlu

+0

'ch'和'nch'比较的情况很奇怪,你的老师究竟做了什么?只要两个值相等,你是否需要停下来,并且测试不超过290个值?也许他希望你使用'Do ... Loop Until'结构。 –

回答

2

不知道你是否必须把它写成'Loop While'来做家务。

但你可以改变你的语法。

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 

和你我不知道你的“做,直到”需要第二次检查,尝试这个办法:

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 
+0

谢谢!得到它的工作! – DenizKutlu

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

+0

谢谢!完成它。 – DenizKutlu

0

“直到”如果为true,则停止“,而”false“时停止。

not ((nch + ch) = 290 Or nch = ch) 

(nch + ch) <> 290 AND nch <> ch 

的 “或” 很可能是你的问题。

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

+0

感谢帮助! – DenizKutlu