【问题标题】:Class for representing a card in Java?用于在 Java 中表示卡片的类?
【发布时间】:2010-07-23 17:17:01
【问题描述】:

我正在用 Java 编写一个二十一点程序,并且开始为对象 Card 编写类声明。这是否就足够了,还是有一些我应该有的方法我正在掩饰?

public class Card {
    public int suit; //Value 1-4 to represent suit
    public int value; //Value 1-13 to represent value (i.e. 2, J)
    public Card(int suit, int value) {
        //Not yet implemented
    } 
}

另外,有没有一种好方法可以在 Java 中使用类似 C++ 的枚举数据结构,因为这对于卡名和花色来说会很好?

【问题讨论】:

标签: java class enums playing-cards


【解决方案1】:
public enum Suite {
    HEART, DIAMOND, CLUB, SPADE
}
public enum Value {
    TWO, THREE, ... , JACK, QUEEN, KING, ACE 
}

剩下的你自己想办法。

【讨论】:

    【解决方案2】:

    是的,你的开始看起来不错。将等级和套装切换到枚举 - 这将是一个好主意。至于方法,在你去发现你需要它们的时候创建它们。根据您正在编写的游戏,您可能需要一组完全不同的方法。

    Java 有一个非常强大的枚举。看看下面的例子。

    公共枚举排名{ 王牌(1,“王牌”), 二(2,“二”), ... ETC 国王(13,“国王”); 私有 int 值; 私有字符串显示; 私有等级(int值,字符串显示){ this.value = 值; this.display = 显示; } 公共 int getValue() { 返回 this.value; } 公共 int getDisplay() { 返回这个。显示; } }

    【讨论】:

    • 构造函数 private Rank() 是否应该被声明为私有?
    • 这不是 100% 正确的,因为 Ace 有多重权力,所以无法在此模式下设置排名。我认为在 Object 上更好,我们可以使用序数作为该等级,我们将第一个元素设置为 NONE,这种情况下另一个需要的枚举是 suit enum SUIT { NONE("None"), DIAOMONDS("Diamonds" ), HEARTS("红心"), CLUBS("俱乐部"), SPADES("黑桃") }
    • 在枚举中只能设置私有构造函数
    • 构造函数被声明为私有,因为它只在枚举中使用。至于 Ace 拥有多重权力,这完全取决于正在玩的游戏。这只是一个展示 Java 枚举强度的例子。
    • 看起来我为原始发帖人的口味过度回答了这个问题。
    【解决方案3】:

    我会(已经)使用带有套装和价值的枚举作为属性。 Suit 和 value 也可以是枚举。

    【讨论】:

      【解决方案4】:

      从 1.5 开始的 Java 完全支持 enums。巧合的是,链接中提供的示例使用卡片类作为示例,就像您尝试做的那样。

      添加 getter 后,您拥有的基类就足够了。如果您需要在某些时候进行排序,实施 Comparable 可能会很有价值。

      【讨论】:

        【解决方案5】:

        关于“我是否应该有一些我正在掩饰的方法”,这确实是主观的,并且基于使用该类的上下文。例如,如果您从不需要打印对象,则可能不需要 'toString()' 函数,但如果这样做,它可能会派上用场(特别是如果您希望输出以特定方式格式化)。

        Java 也有枚举,请参阅 here 获取教程。

        【讨论】:

          【解决方案6】:

          您可能希望为不同的游戏创建子类。 PokerCard 和 SolitareCard 可以相提并论;一方面,王牌大于王;另一方面,Ace 小于 King。

          对于 BlackjackCard,比较无关紧要。您可能会考虑使用 intValue(),其中 K 或 Q 或 J 的 intValue() 为 10,但这对于 BlackjackCard 来说并不容易,因为 A 可以是 1 或 11。所以这是设计模型以匹配现实世界的一个很好的练习:这里有一个问题,卡片的整数值并不完全是卡片固有的,而是依赖于卡片的上下文。

          【讨论】:

          • 为什么每个游戏不使用相同的卡类型但Comparator不同?
          猜你喜欢
          • 2013-12-22
          • 2011-06-08
          • 2020-09-20
          • 2021-12-24
          • 1970-01-01
          • 1970-01-01
          • 2020-09-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多