用Java代表卡的类?
我正在用Java制作一个二十一点程序,我开始编写一个对象卡的类声明。 这是否足够,或者我应该采用哪些方法来掩饰?
public class Card { public int suit; //Value 1-4 to represent suit public int value; //Value 1-13 to represent value (ie 2, J) public Card(int suit, int value) { //Not yet implemented } }
另外,有一种很好的方法可以在Java中使用C ++的枚举数据结构,因为这对卡名称和套装来说会很好吗?
public enum Suite { HEART, DIAMOND, CLUB, SPADE } public enum Value { TWO, THREE, ... , JACK, QUEEN, KING, ACE }
其余的你可以搞清楚。
是的,你的开始看起来不错。 将等级和套装切换到枚举 – 这将是一个好主意。 就方法而言,随时创建它们并发现您需要它们。 根据您正在编写的游戏,您可能需要一组完全不同的方法。
Java有一个非常强大的枚举。 看看下面的例子。
public enum Rank { ACE(1,“Ace”), 两个(2,“两个”), ......等 KING(13,“King”); 私有int值; 私人字符串显示; private Rank(int value,String display){ this.value = value; this.display = display; } public int getValue(){ 返回this.value; } public int getDisplay(){ 返回this.display; } }
我会(有)使用带有套装和价值作为属性的枚举。 套装和价值也可以是枚举。
从1.5开始的Java完全支持枚举 。 巧合的是,链接中提供的示例使用卡片类作为示例,就像您尝试的那样。
你有的基类足以添加getter。 如果您需要在某个时刻进行排序,那么实现Comparable可能会很有价值。
关于“我应该有哪些方法,我正在掩饰”,这是非常主观的,并且基于使用该类的上下文。 例如,如果您永远不需要打印对象,则可能不需要’toString()’函数,但如果这样做,它可能会派上用场(特别是如果您希望以特定方式格式化输出)。
Java也有枚举,请参阅此处获取教程。
您可能想要为不同的游戏制作子类。 PokerCard和SolitareCard可以比较; 在其中一个,Ace大于King; 在另一方面,Ace比King少。
对于BlackjackCard,比较是无关紧要的。 您可能会考虑使用intValue(),其中K或Q或J的intValue()为10,但这对BlackjackCard来说不会很容易,因为Ace可以是1或11。 因此,在设计模型以匹配现实世界时,这是一个很好的练习:这是一个问题,其中卡的整数值不是卡的完全固有的,而是取决于卡的上下文。