提问人:iLuvSoftware 提问时间:11/16/2023 最后编辑:jarmanso7iLuvSoftware 更新时间:11/16/2023 访问量:100
填充一副纸牌并从一副 C 中随机打印一张纸牌#
Filling a deck of cards and printing a random card from the deck C#
问:
static void Main(string[] args)
{
string[] cardDeck = new string[52];
string[] numbers = { "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King" };
string[] suites = { "Hearts", "Clubs", "Diamonds", "Spades" };
for (int i = 0; i < numbers.Length; i++)
{
for (int j = 0; j < suites.Length; j++)
{
cardDeck[i + j] = numbers[i] + " of " + suites[j];
Console.WriteLine(cardDeck[i + j]);
}
}
Console.WriteLine("The random card is " + RandomCard(cardDeck));
}
static string RandomCard(string[] deck)
{
Random card = new Random();
int index = card.Next(0, deck.Length);
return deck[index];
}
我在打印 RandomCard 时遇到困难。有时它会打印卡片,有时则不会。我是否正确填充了我的卡组?如何解决此问题?
答:
引入第三个索引变量,以跟踪牌在牌组中的位置。每次将新牌放入牌组时,您可以与 一起递增变量,即在内部 for 循环中:k
j
static void Main(string[] args)
{
string[] cardDeck = new string[52];
string[] numbers = { "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King" };
string[] suites = { "Hearts", "Clubs", "Diamonds", "Spades" };
int k = 0;
for (int i = 0; i < numbers.Length; i++)
{
for (int j = 0; j < suites.Length; j++)
{
cardDeck[k] = numbers[i] + " of " + suites[j];
Console.WriteLine(cardDeck[k]);
k++;
}
}
Console.WriteLine("The random card is " + RandomCard(cardDeck));
}
static string RandomCard(string[] deck)
{
Random card = new Random();
int index = card.Next(0, deck.Length);
return deck[index];
}
@500-InternalServerError 提出的解决方案也可以完成这项工作,但由于您有 3 个数组对 3 个数据集合进行建模,我认为使用 3 个索引也是很自然的。[i*4 + j]
编辑:按照评论中的要求,解释其工作原理。
在外循环中,我们循环播放 13 个数字,从 Ace 到 King。这意味着索引将采用从 0 到 12 的值。
for
i
使用另一个嵌套的 for 循环,对于每个数字(即 的每个值),我们再次循环 4 次,每次对应一个花色。这意味着索引将采用从 0 到 3 的值。在内部循环的每次迭代中,我们将有一个不同的 和 组合,它们组成一张唯一的卡片,因此在这一点上,我们将卡片存储在数组中。唯一组合的总量为 13*4 = 52。
i
j
i
j
deck[]
然后,有一个完全分离的 52 个位置数组要填充,我们只想按顺序放置 52 个生成的值。因此,索引将采用 0 到 51 之间的值。请注意,由于有 52 张牌,内部循环将正好执行 52 次。这意味着,如果我们在内部循环内递增,我们将遍历从 0 到 51,每次执行内部循环时都会增加 1。
cards[]
k
k++
deck[]
k
最后,我们从牌组中选择一张牌,使用
RandomCard(string[] deck)
评论
下一个:UUID 唯一性
评论
cardDeck[i + j]
是错误的 - 他们应该更像 - 4,因为有四种花色。cardDeck[i*4 + j]
RandomCard
Random