请问一个C#程序语句问题

来源:百度知道 编辑:UC知道 时间:2024/05/14 00:00:07
是《C#入门经典》里的,目的是将扑克牌从现有的cards数组中随即复制到一个临时数组。
public void Shuffle()
{
Card[] newDeck = new Card[52];
bool[] assigned = new bool[52];
Random sourceGen = new Random();
for (int i = 0; i < 52; i++)
{
int destCard = 0;
bool foundCard = false;
while (foundCard == false)
{
destCard = sourceGen.Next(52);
if (assigned[destCard] == false)
foundCard = true;
}
assigned[destCard] = true;
newDeck[destCard] = cards[i];
}
newDeck.CopyTo(cards, 0);
}

里边foundCard到底有什么用,好象不用也可以啊,并且当有重复的时候也限制不了,请高手指点!谢谢!

程序使用assigned数组来标记哪些牌已经产生,哪些牌还没有产生。已经产生的牌在assigned数组中对应的值为true,否则为false。
语句if (assigned[destCard] == false) 判断当前的产生的牌是否重复,并通过变量foundCard来标记。如果重复(foundCard==false),则重新生成新牌并检查是否重复,直到不重复为止。

所以,foundCard必不可少。