用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。 因此,在设计模型以匹配现实世界时,这是一个很好的练习:这是一个问题,其中卡的整数值不是卡的完全固有的,而是取决于卡的上下文。