双11狂欢大促

盲盒赢 定制羽绒服

开启惊喜盲盒,抽取你的专属好礼

— 惊喜奖品抢先看 —

关于扑克牌类库的问题

zzz9413 zzz9413 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
照着《C#入门经典(第三版)》第十章的扑克牌例子,做了一个简单的程序。但运行有个很奇怪的问题,如图
king这张牌总显示为13,百思不得其解。
代码如下:
类库部分
public enum Rank //枚举1-13
{
Ace,
Deuce,
Three,
Four,
Five,
Six,
Seven,
Eight,
Nine,
Ten,
Jack,
Queen,
king
}
--------------------------------------
public enum Suit //枚举四个花色
{
Club,
Diamond,
Heart,
Spade,
}

---------------------------------------
public class Card //card类,存放每张牌的
{
public readonly Suit suit;//suit 和 rank是前面建立的枚举
public readonly Rank rank;

public Card(Suit newSuit, Rank newRank)
{
suit = newSuit;
rank = newRank;
}

private Card()
{
throw new System.NotImplementedException();
}

public override string ToString()
{
return "the " + rank + " of " + suit + "s";
}
}
}

-------------------------------------------------
public class DECK //存放一副扑克的类,
{
private Card[] cards;//cards为一个前面建立的Card数组

public DECK() //每次迭代创建一张牌
{
cards = new Card[52];
for (int suitVal = 0;suitVal < 4;suitVal++)
{
for (int rankVal = 1;rankVal < 14;rankVal++)
{
cards[suitVal * 13 + rankVal -1] = new Card((Suit)suitVal,
(Rank)rankVal);
}
}
}

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

}

public Card GetCard(int cardNum) //根据指定下表返回一个card对象
{
if (cardNum >= 0 && cardNum <= 51)
return cards[cardNum];
else
throw (new System.ArgumentOutOfRangeException("cardNum", cardNum,
"Value must between 0 and 51."));

}
}





建一个控制台项目来引用这个类库:
static void Main(string[] args)
{
DECK myDeck = new DECK();
myDeck.Shuffle();
for (int i = 0; i < 52; i++)
{
Card tempCard = myDeck.GetCard(i);
Console.Write(tempCard.ToString());
if (i != 51)
Console.Write(",");
else
Console.WriteLine();
}
Console.ReadKey();
}

运行结果,就如图显示,king总是显示为13。求高手解疑!!!
...全文

相关推荐

评论 8
收藏 已收藏
分享
返回顶部
zzz9413
C# 111,129 成员 642,540 内容