0

您好,我目前正在尝试完成一项作业,但我在完成其中一门课程时遇到困难,该课程已被调用hand.cs,它看起来如下。

hand.cs 从中提取的另外两个数据源被称为card.csand twentyOne.cs,在人们发表评论之前,我知道这是一个明显的解决方案,对许多读者来说可能看起来很可笑,但是我一直在研究这个 hand.cs 以获得更好的4天的一半没有进展。

任何和所有有关的帮助"public void DisplayHand(bool shortFormat, bool displaySuit)"将不胜感激,如果您的答案不是太麻烦,您可以概述代码以完成返回并就其工作方式提供一些反馈。

4

1 回答 1

1

在您的Hand班级中,您将当前手牌存储在List<string>适当命名的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()方法,您可以简单地传递您收到的参数,您将返回一个表示卡片的漂亮且格式化的字符串!您应该无需做太多工作,就可以将上面的循环与对卡片的调用结合起来,以获得所需的输出:DisplayHandToString()

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()改为Console.Write()

* 注意:我选择StringBuilder在我的示例中使用而不是基本的字符串连接有两个原因。首先是因为在 C# 中,字符串是不可变的(连接它们的效率远低于使用StringBuilder);第二个是向您展示如何使用StringBuilder(我只假设您不使用它,因为您的示例代码都不包含它)。要做到这一点StringBuilder(删除评论/等):

string cardOutput = string.Empty;
foreach (Card card in cards) {
    if (!cardOutput.Equals(string.Empty)) cardOutput += " ";
    cardOutput += card.ToString(shortFormat, displaySuit);
}
Console.WriteLine(cardOutput);
于 2012-10-16T05:17:14.107 回答