我遇到一些看起来很简单的问题.我正在使用条件和预测试循环虽然它似乎甚至没有执行一个,因为满足条件,但它们不是.
我有,但我似乎永远不会遇到/当我打破它.它只是跳过它
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)
我的逻辑可能略有偏差,我只是想让某人指出我正确的方向/看到我的错误.
谢谢
它永远不会进入循环,因为这里:
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)