【发布时间】:2016-09-25 06:46:25
【问题描述】:
我有一个整数数组,称为卡片[52]。每个元素都包含一个表示卡片的整数(例如,cards[0] = 5 将表示 6 个俱乐部)。
这就是我洗牌数组的方式。它有效,但我得到重复。
private void shuffleCards()
{
for (int i = 0; i < cards.Length; i++)
{
int randIndex = r.Next(0, 52);
int origCard = cards[i];
cards[i] = cards[randIndex];
cards[randIndex] = origCard;
}
}
r 是我在程序开始时初始化的随机变量。
在测试程序时,我注意到我会得到同一张卡 2 或 3 次。显然我不能重复,它们都必须不同。我无法以任何方式看到这种方法如何让我重复。
如何在不重复的情况下随机播放此数组?谢谢。
编辑
好的,结果是随机播放功能不是问题所在。导致问题的是 deal() 函数。
private void deal()
{
for (int i = 0; i < 26; i++)
{
userCards[i] = cards[i];
setUserValue(); //ignore this
}
for (int i = 26; i < 52; i++)
{
opponentCards[i - 26] = cards[i];
setOpponentValue(); //ignore this
}
}
我确定这不是随机播放功能。我将所有卡片的结果打印到一个文本文件中,但没有看到任何迭代。然而,当牌被发给用户和对手时,所有的迭代都发生了。有什么建议吗?
【问题讨论】:
-
要么移除已抽出的牌以免重复,要么存储已抽出的牌并将其与当前抽出的牌进行比较,然后抽一张新牌或您选择的牌。 (这句话画得太多了)
-
随机化函数可能会产生重复的数字,所以不要尝试用其他方式交换元素
-
你如何确定有重复?你是如何填充数组的?为什么不创建卡片类型?
-
好的。所以你已经证明洗牌后的牌没有重复,你如何查看两只手来确定它们有重复?
setUserValue和setOpponentValue是做什么的?
标签: c# arrays random shuffle playing-cards