一段程序代码的疑问?

来源:百度知道 编辑:UC知道 时间:2024/05/25 22:22:20
这是书上的一个例子,我想问的是设置bool变量foundCard有什么用?好像多了个while循环没什么用?
为什么给数组每个数都赋完值后还需要使用CopyTo()?一定要用吗?

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

这八成是一个洗牌的程序:
并且在外部生命了一个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++) //循环0~51
{
int destCard = 0;
bool foundCard = false;
//以上两步初始化变量。
while (foundCard == false) //当foundCard为false时,执行循环,因为前面已经赋值为false了,所以,至少执行一次。
{
destCard = sourceGen.Next(52); //产生一个非负随机数0~51
if (assigned[destCard] == false) //这里用到了assigned数组,看看这个产生的随机数的指示的那个位置以前有没有赋值(分配)过
foundCard = true; //如果没有分配过,那么foundCard为true,下面就可以退出循环了,否则,接着循环,到if条件成立
}
assigned[destCard] = true; //刚才产生的随机数的那个位置 告诉assigned数组,这个位置已经被分配过了
newDeck[destCard] = cards[i]; //然后结果数组的这个随机数位置,储存当前循环的变量为索引的cards变量中的值
} //然后共执行52次循环
newDeck.CopyTo(cards, 0); //这是把结果拷贝回以前的cards数组里,因为这个函数不返回值,所以他把结果拷贝会原数组里了
}

研究中,下学期我们开这门课程^