扑克牌的面向对象建模

扑克牌的面向对象建模

  • 一、扑克牌定义
      • 枚举类型的定义
      • enum类常用方法
      • 扑克牌花色枚举定义
      • 扑克牌等级枚举定义
      • 每张扑克牌类定义
    • 二、顺序及大小排序
      • 顺序生成52张牌
      • 52张扑克牌的任意排列
      • 不同牌型大小的比较

一、扑克牌定义

本文采用枚举类型(Enum)对一副扑克牌进行建模。首先,介绍一下枚举类型:

枚举类型的定义

枚举类型的关键字为enum,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum,而 E 表示枚举类型的名称。枚举类型的每一个值都将映射到 protected Enum(String name, int ordinal) 构造函数中,其中每个值的名称都被转换成一个字符串,并且序数设置表示了此设置被创建的顺序。

//扑克牌的四种花色:
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);

enum类常用方法

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;
    }

二、顺序及大小排序

顺序生成52张牌

一副扑克牌共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

扑克牌的面向对象建模_第1张图片

52张扑克牌的任意排列

通过随机数实现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;
        }
    }
}

不同牌型大小的比较

未完待续。。。

你可能感兴趣的:(Java,Java)