【发布时间】:2019-08-13 09:09:40
【问题描述】:
我已经成功地向控制台输出了 52 个不同的“卡片”,但是我执行的检查以查看是否生成了单个对象似乎表明我在某个地方出错了。
例如,我的 num 构造函数不会随着卡片的创建而增加,而且当我使用 foreach 循环遍历列表时,卡片的值都为 13。我相信这是我将卡片添加到卡片组的地方,但我并不完全当然。
对不起,如果这是一个已经回答过的新手问题!
{
public int Suite
public int Value
public string cardString;
public int num;
public Card ()
{ num++; }
public static void GenerateDeck()
{
List<Card> Deck = new List<Card>();
for (int c = 1; c < 5; c++)
{
Card card = new Card();
{
card.Suite = c;
}
for (int k = 1 ; k <=13; k++)
{
card.Value = k;
{
switch (card.Suite)
{
case 1:
card.cardString = "Hearts";
break;
case 2:
card.cardString = "Diamonds";
break;
case 3:
card.cardString = "Spades";
break;
case 4:
card.cardString = "Clubs";
break;
}
if (card.Value == 1)
{
card.cardString = "Ace of " + card.cardString;
}
else if (card.Value > 0 && card.Value <= 10)
{
card.cardString = card.Value.ToString() + " of " + card.cardString;
}
else if (card.Value == 11)
{
card.cardString = "Jack of " + card.cardString;
}
else if (card.Value == 12)
{
card.cardString = "Queen of " + card.cardString;
}
else if (card.Value == 13)
{ card.cardString = "King of " + card.cardString; }
Deck.Add(card);
}
Console.WriteLine(card.cardString);
}
Console.ReadLine();
}
foreach (var item in Deck)
{
Console.WriteLine("CARD SUITE {0} AND CARD VALUE {1}, num{2} ", item.Suite, item.Value, item.num
);
}
Console.WriteLine(Deck.Count);
Console.ReadLine();
}
}
`````
【问题讨论】:
-
您正在重用卡片对象。您为每个套件构建一次,然后为该套件中的所有 13 张卡重复使用它。您需要在最里面的循环内移动卡片对象的构造。
-
换句话说,您正在构建 4 个不同的卡片对象,然后将值分配给每个 13 次,并将卡片对象每次添加 13 次到您的列表中。这意味着你最终会得到 13 个红桃 K,13 个黑桃 K,13 个 ... 等等。
-
如果您不知道引用类型(类)和值类型(结构)之间的区别,那么您绝对应该搜索这些主题并阅读它们。
-
非常感谢,Card 类是一种不好的方法吗?我已经成功编写了一个类似的程序,生成具有年龄、身高和唯一 ID 的“人”,但我没有使用嵌套循环来完成这项任务。
-
不,Card 类很好。您只需要了解引用类型的工作原理(一个非常重要的概念)。