【发布时间】:2013-03-17 17:36:31
【问题描述】:
我正在尝试通过从一副牌中随机取牌并将它们放入另一副牌来洗牌,以避免在将它们添加到新列表后将它们从原始列表中删除,从而获得重复的牌,这似乎导致参数超出范围错误,尽管我努力减少随机数的范围。请给点建议?
List<Card> shuffledDeck = new List<Card> ();
for (int i = 0; i <= 51; ++i)
{
int c = myDeck.Count + 1;
int n = rNumber.Next (1, c);
shuffledDeck.Add(myDeck[n]);
myDeck.Remove(myDeck[n]);
}
【问题讨论】:
-
第一:51是什么幻数?二、为什么是
myDeck.Count + 1和rNumber.Next(1, c)?列表索引是从零开始的,看起来您经常会产生“减一”错误。 -
另外,你试过这个 oneliner
List<Card> shuffledDeck = myDeck.Orderby(_ => rNumber.Next()).ToList();吗? SO充满了这种类型的答案。
标签: c# game-engine shuffle