我正在尝试在控制台标准卡片上打印。到目前为止,这是我的代码,我被卡住了。
我的问题 - 是否有任何方法可以在cardnumber foreach声明中使用Suit枚举,基本上可以打印卡号/套装,卡号/套装等。我知道有更好的方法可以做到这一点,但我很好奇是否有可能完成。还有任何想法如何在一行上只打印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);
}
}
}
}
}
答案 0 :(得分:3)
是的,您可以在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();
}