我正在尝试在控制台上打印标准一副纸牌。到目前为止,这是我的代码,我卡住了。
我的问题 - 有没有办法在每个语句的卡号中使用西装枚举,基本上可以打印卡号/花色、卡号/花色等。我知道有更好的方法可以做到这一点,但我很好奇是否有可能完成。还有任何想法如何在一行上只打印 2,之后只在行上打印 3 秒等等?
问候
using System;
using System.Linq;
class Print_a_Deck_of_52_Card
{
public enum Suit
{
Club = 'u2663',
Diamond = 'u2666',
Heart = 'u2665',
Spades = 'u2660',
}
public enum CardNumber
{
Two = 2,
Three = 3,
Four = 4,
Five = 5,
Six = 6,
Seven = 7,
Eight = 8,
Nine = 9,
Ten = 10,
J = 11,
Q = 12,
K = 13,
A = 14
}
static void Main()
{
Console.OutputEncoding = System.Text.Encoding.Unicode;
foreach (Suit val1 in Enum.GetValues(typeof(Suit)))
foreach (CardNumber val in Enum.GetValues(typeof(CardNumber)))
{
for (int i = 0; i < 4; i++)
{
if ((int)val > 10)
{
Console.WriteLine("{0}", val);
}
else
{
Console.WriteLine("{0}", (int)val);
}
}
}
}
}
是的,您可以在 foreach
循环主体中的任何位置使用迭代器变量,即使该循环包含另一个循环:
foreach (Suit val1 in Enum.GetValues(typeof(Suit)))
{
foreach (CardNumber val in Enum.GetValues(typeof(CardNumber)))
{
if ((int)val > 10)
{
Console.WriteLine("{0} of {1}", val, val1);
}
else
{
Console.WriteLine("{0} of {1}", (int)val, val1);
}
}
}
现在,如果你想重写它,以便所有 2 将一起打印,然后是 3,依此类推,只需交换循环:
foreach (CardNumber val in Enum.GetValues(typeof(CardNumber)))
{
foreach (Suit val1 in Enum.GetValues(typeof(Suit)))
{
if ((int)val > 10)
{
Console.WriteLine("{0} of {1}", val, val1);
}
else
{
Console.WriteLine("{0} of {1}", (int)val, val1);
}
}
}
要将它们写成一行,您可以使用 Write
而不是在循环内将每个值保持在一起,然后在循环外部WriteLine
将该行与下一行分开:
foreach (CardNumber val in Enum.GetValues(typeof(CardNumber)))
{
foreach (Suit val1 in Enum.GetValues(typeof(Suit)))
{
if ((int)val > 10)
{
Console.Write("{0} of {1}", val, val1);
}
else
{
Console.Write("{0} of {1}", (int)val, val1);
}
}
Console.WriteLine();
}