当前正在为纸牌游戏战争的Windows窗体版本编写代码。我需要一种方法来随机整理列表以使卡片组随机化。我已经将eck和shuffledDeck的列表定义为字符串列表。
当我运行createDeck()时,我将其输出到Windows窗体的文本框中,以确保它正确地创建了列表。我还进行了测试,以确保deck.Count()等于52
private void shuffle()
{
createDeck();
shuffledDeck = deck;
Random r = new Random();
int randomIndex = 0;
while (deck.Count > 0)
{
randomIndex = r.Next(0, deck.Count);
shuffledDeck.Add(deck[randomIndex]);
deck.RemoveAt(randomIndex);
}
这是我对纸牌实际上已被洗净的测试
for (int a = 0; a <= 51; a++)
{
textBox1.Text += " " + shuffledDeck[a];
}
我希望每次都能看到一个经过改组的平台,但是每当我运行它时,Visual Studio就会冻结,我不得不强制退出该程序以退出。
答案 0 :(得分:2)
行content
使shuffledDeck = deck;
和shuffledDeck
成为对同一对象的引用。因此,在while循环内,您要删除“卡片”并将其添加到同一卡片组和条件卡片组。Count> 0始终为真。
尝试使用此对象克隆器:Deep cloning objects
然后将deck
替换为shuffledDeck = deck;