循环和条件C#

Yop*_*Yop 0 c# while-loop

我遇到一些看起来很简单的问题.我正在使用条件和预测试循环虽然它似乎甚至没有执行一个,因为满足条件,但它们不是.

我有,但我似乎永远不会遇到/当我打破它.它只是跳过它

int sorter = random.Next(0, 10);
bool player1full = false;
bool player2full = false;

while (player1full && player2full == false)
{
    if (chuckcards[sorter] != null)
    {
         while (player1full != true)
         {
              if (player1.Count != 5)
              {
                   player1.Enqueue(chuckcards[sorter]);
                   chuckcards[sorter] = null;
              }
              else
              {
                   player1full = true;
              }

              sorter = random.Next(0, 10);
         }

         while (player2full != true)
         {
              if (chuckcards[sorter] != null)
              {
                   if (player2.Count != 5)
                   {
                        player2.Enqueue(chuckcards[sorter]);
                        chuckcards[sorter] = null;
                   }
                   else
                   {
                        player2full = true;
                   }

                   sorter = random.Next(0, 10);
               }
          }
     }
     else
     {
          sorter = random.Next(0, 10);
     }
}
Run Code Online (Sandbox Code Playgroud)

我的逻辑可能略有偏差,我只是想让某人指出我正确的方向/看到我的错误.

谢谢

p.s*_*w.g 8

它永远不会进入循环,因为这里:

bool player1full = false;
bool player2full = false;
while (player1full && player2full == false)
Run Code Online (Sandbox Code Playgroud)

这将测试布尔值player1full,如果是true,则测试布尔值player2full == false.由于player1fullIS false,它就停在那里,从来没有进入循环.我想你想要的是:

while (player1full == false && player2full == false)
Run Code Online (Sandbox Code Playgroud)

或者等价

while (!player1full && !player2full)
Run Code Online (Sandbox Code Playgroud)

甚至(根据德摩根定律):

while (!(player1full || player2full))
Run Code Online (Sandbox Code Playgroud)

但是,似乎整个外环都是不必要的.我不能完全确定你的程序的完整上下文(这个问题超出了这个范围),但它可以改写为:

int sorter;
while (player1.Count != 5)
{
    sorter = random.Next(0, 10);
    if (chuckcards[sorter] != null)
    {
        player1.Enqueue(chuckcards[sorter]);
        chuckcards[sorter] = null;
    }
}

while (player2.Count != 5)
{
    sorter = random.Next(0, 10);
    if (chuckcards[sorter] != null)
    {
        player2.Enqueue(chuckcards[sorter]);
        chuckcards[sorter] = null;
    }
}
Run Code Online (Sandbox Code Playgroud)