本文采用枚举类型(Enum)对一副扑克牌进行建模。首先,介绍一下枚举类型:
枚举类型的关键字为enum,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum
//扑克牌的四种花色:
public enum CardSuit
{
HEART,SPADE,DIAMOND,CLUB;//红桃,黑桃,方块,梅花
}
上述代码实际上调用了4次 Enum(String name, int ordinal):
new Enum("HEART",0);
new Enum("SPADE",1);
new Enum("DIAMOND",2);
new Enum("CLUB",3);
int compareTo(E o);//比较此枚举与指定对象的顺序
String name();//返回此枚举常量的名称,在其枚举声明中对其进行声明
int ordinal();//返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)
String toString();//返回枚举常量的名称,它包含在声明中
int ordinal();//返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)
每张扑克牌对象有两种属性:花色和等级。需要创建2个枚举类型包含这两类实例。
扑克牌有四种花色:红桃(HEART),黑桃(SPADE),方块(DIAMOND),梅花(CLUB)
public enum CardSuit{
HEART, SPADE, DIAMOND, CLUB;}
public enum CardRank {
ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING;
public String toString(){
String str=null;
switch (this)
{
case ACE:str="A";break;
case TWO:str="2";break;
case THREE:str="3";break;
case FOUR:str="4";break;
case FIVE:str="5";break;
case SIX:str="6";break;
case SEVEN:str="7";break;
case EIGHT:str="8";break;
case NINE:str="9";break;
case TEN:str="10";break;
case JACK:str="J";break;
case QUEEN:str="Q";break;
case KING:str="K";break;
}
return str;
}
}
public class Card{
private CardSuit color;
private CardRank rank;
public CardSuit getColor() {
return color;
}
public void setColor(CardSuit color) {
this.color = color;
}
public CardRank getRank() {
return rank;
}
public void setRank(CardRank rank) {
this.rank = rank;
}
public void show()
{
System.out.printf("%s%-4s",color,rank);
}
public Card(CardSuit color,CardRank rank){
this.color = color;
this.rank = rank;
}
一副扑克牌共54张,除大小王有52张,52张牌按花色分为4类,每类13张。首先对其进行顺序生成,代码如下:
private static Card[] cards=new Card[52];
public static void create(){
int count=CardSuit.values().length;
for(int i=0;i
通过随机数实现52张扑克牌的任意排列。
public static void random() {
Random rnd = new Random();
for (int i = 0; i < 52; i++) {
int k = rnd.nextInt(52);
if (i != k) {
Card c = cards[i];
cards[i]=cards[k];
cards[k]=c;
}
}
}
未完待续。。。