0

とても単純に見えるはずのことに問題があります。私は条件付きでプレテストループWhileを使用していますが、条件は満たされているが満たされていないため、1つも実行していないようです。

私は持っていますが、ループが満たされたようには見えません/私がそれを壊したとき. スキップするだけ

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);
     }
}

私の論理は少しずれている可能性があり、誰かに正しい方向に向けてもらいたい/エラーを確認してもらいたいだけです。

ありがとうございました

4

5 に答える 5

8

ここにあるため、ループに入ることはありません。

bool player1full = false;
bool player2full = false;
while (player1full && player2full == false)

これは のブール値をテストし、player1fullの場合trueは のブール値をテストしますplayer2full == falseplayer1fullisであるためfalse、すぐに停止し、ループに入ることがありません。あなたが望むのは次のとおりだと思います:

while (player1full == false && player2full == false)

または同等に

while (!player1full && !player2full)

または(ド・モルガンの法則による):

while (!(player1full || player2full))

ただし、外側のループ全体が不要のようです。プログラムの完全なコンテキストを知らずに完全に確信することはできませんが (それはこの質問の範囲外です)、次のように書き換えることができます。

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;
    }
}
于 2013-05-01T14:40:06.333 に答える
0

あなたは書くべきです:

while(!player1full && !player2full)

幸運を!

于 2013-05-01T14:40:32.730 に答える