显示手串二十一点

时间:2012-10-16 03:12:42

标签: c# console-application

您好我正在尝试完成一项作业,但我在完成其中一个课程时遇到困难,该课程名为hand.cs,如下所示。

hand.cs正在拉动的另外两个数据来源称为card.cstwentyOne.cs,然后人们发表评论我知道这是一个明显的解决方案,对许多读者来说可能看起来很可笑但是,我一直在看这个hand.cs,为期4天,没有任何进展。

对于"public void DisplayHand(bool shortFormat, bool displaySuit)"的任何和所有帮助都将非常感激,如果您的答案不是太麻烦,您可以概述代码以完成返回并提供一些反馈,了解它是如何工作的。

1 个答案:

答案 0 :(得分:1)

Hand课程中,您将当前手牌存放在名为List<string>的{​​{1}}中。在cards方法中,您可以使用DisplayHand循环遍历列表:

foreach

现在,在您的foreach (Card card in cards) { // process and/or display current card } 课程中,Card方法已超载以接受两个参数:

ToString()

这两个相同的参数可以方便地传递到public string ToString(bool shortFormat, bool displaySuit) 类中的DisplayHand函数。由于您希望从 Cards方法调用ToString()方法,因此您可以简单地传入您收到的参数,并将返回一个很好的&amp;格式化的字符串代表卡!您应该在没有太多工作的情况下将上面的循环与对卡DisplayHand的调用结合起来以获得所需的输出:

ToString()

我使用单个空格作为卡片之间的分隔符;您可以将其更新为您认为合适的任何内容。另外,如果您不希望每个卡片列表都显示在换行符上,只需将public void DisplayHand(bool shortFormat, bool displaySuit) { StringBuilder cardOutput = new StringBuilder(); foreach (Card card in cards) { if (cardOutput.Length > 0) { // we already have one or more cards to display for this hand; separate them // with a space-delimiter cardOutput.Append(" "); } // add the current card to the display cardOutput.Append(card.ToString(shortFormat, displaySuit)); } Console.WriteLine(cardOutput.ToString()); } 更改为Console.WriteLine()

*注意:我选择在我的示例中使用StringBuilder而不是基本字符串连接,原因有两个。第一个是因为在C#中,字符串是不可变的(并且它们的连接效率远低于使用Console.Write());第二个是向您展示如何使用StringBuilder(我假设您不使用它,因为您的示例代码都没有包含它)。要在没有StringBuilder的情况下执行此操作(删除了评论/等):

StringBuilder