【问题标题】:How to add the values of two “Cards” in Java? [duplicate]如何在 Java 中添加两个“卡片”的值? [复制]
【发布时间】:2014-10-29 02:27:19
【问题描述】:

我正在做一个项目来模拟二十一点游戏中的第一笔交易。到目前为止,该程序创建了两张随机等级的牌(例如 2 或 3)和随机花色。我正在努力创建一个 switch table 或 if-else ladder 以将两张卡的附加值分配为变量“score”。教授创建了一个 java .class,其中每个卡片等级都分配了一个整数值(2 是第 0 张卡片,因此它的值为 0,3 是第 1 张卡片,因此它的值为 1)。我的问题是创建一个 Score() 方法来计算两张卡的实际加分。

if (card1.rank() == 0){
        score = 2;            
    } else if (card1.rank() == 1){ //I need the program to examine both card1 and card2
        score = 3;
    } else if (card1.rank() == 2){
        score = 4;

我只知道如何为 一个 卡片分配一个新值,我如何更改此代码以便它获取 两个 卡片的值并返回正确的分数,而不仅仅是一张牌?非常感谢您的帮助,我会尽力快速回答任何问题以澄清。

【问题讨论】:

  • 我完全不明白排名和分数有什么关系。在这种情况下,您为什么还要查看排名?你只是想把所有不同的卡片分数加在一起,不是吗?

标签: java blackjack


【解决方案1】:

得到card1的分数,然后得到card2的分数,然后将这些各自的值相加(加法),这就是你的累积分数。

int score = getScore(card1) + getScore(card2);

其中getScore(Card) 是您所指的switchif else 链。 或者,你可以选择让getScore() 成为Card 类的一部分,然后像这样使用它

int score = card1.getScore() + card2.getScore();

编辑

return card1.getRank() + card2.getRank() + 4;

一张卡的分数是rank() + 2。两张牌的分数是card1.rank() + 2 加上card2.rank() + 2card1.getRank() + card2.getRank() + 4

【讨论】:

  • 我明白你在说什么,但我无法为getScore() 创建新方法。我只能在已经存在的 Score() 方法中编写 if/else 或 switch 来计算两张牌手的分数并返回值。
  • @JamesCurtis card.rank() 在您的帖子中看起来像 int。如果不是,你是如何处理== 1== 2 的?
  • 是的,card.rank() 是一个整数。但是卡片的 .rank() 和卡片的 .score() 是不一样的。
  • card1.rank() + card2.rank() + 4 可以工作,但仅适用于整数卡。人脸牌的 rank() 为 Jack = 9,Queen = 10,King = 11,Ace = 12。
【解决方案2】:

您的方法存在几个问题。使用整数来表示牌的等级很好,但使用 0=deuce...12=ace 会使事情变得过于复杂。更好的是 1=ace, 2=deuce,...13=king。

例如,按照你的方式,单张牌的得分是这样的:

int cardValue() {
    if (this.rank == 12) return 1;
    if (this.rank >= 8) return 10;
    return this.rank + 2;
}

我的方式,变成:

int cardValue() {
    if (this.rank >= 10) return 10;
    return this.rank;
}

你的Score() 函数在不知名的地方。它在您的对象结构中的什么位置?它不能是 Card 的方法,因为它应该只返回一张卡片的分数。什么物体代表一手牌?这将是 Score() 方法的一个地方。如果您没有手对象而只使用卡片列表,那么 Score() 可能是 Card 的静态方法,但它会将卡片列表作为参数。最后,Score() 无法指示硬/软手。软 17 的分数与硬 17 的分数不同(例如,一些赌场打了一个,但没有打另一个)。

假设您有一个 Hand 对象,其中包含一组名为 cards 的卡片。这是一种方法:

int handTotal() {
    int total = 0;
    boolean foundAce = false;

    for (Card c: this.cards) {
        total += c.cardValue();
        if (c.cardValue() == 1) foundAce = true;
    }
    if (foundAce && total < 12) total += 10;
    return total;
}

【讨论】:

    猜你喜欢
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多