java ArrayList实现扑克牌,包含创建牌组、洗牌全过程

//用ArrayList实现一副扑克牌
//没有大小王,数字1-13,10-13表示J,Q,K
//四个花色:黑桃♠,红桃♥,方块◇,梅花♣
class Card{
    
    //扑克牌
    private  int rank;//数字
    private  String suit;//花色

    public int getRank() {
    
    
        return rank;
    }

    public void setRank(int rank) {
    
    
        this.rank = rank;
    }

    public String getSuit() {
    
    
        return suit;
    }

    public void setSuit(String suit) {
    
    
        this.suit = suit;
    }

    public Card(int rank, String suit) {
    
    
        this.rank = rank;
        this.suit = suit;
    }

    @Override
    public String toString() {
    
    
        return "Card{" +
                "数字:" + rank +
                ", 花色='" + suit + '\'' +
                '}';
    }
}

public class test {
    
    
    public static final String[]suits={
    
    "♥","♠","◇","♣"};//四种花色
    private static List<Card> makeCard(){
    
    
        ArrayList<Card>cards=new ArrayList<>();//这里你不用ArrayList用List也可以
        for(int i=0;i<4;i++){
    
    //4中花色
            for(int j=0;j<=13;j++){
    
    //每个花色13张牌(1-9,JQK)
                String suit=suits[i];
                Card card=new Card(j,suit);
                cards.add(card);
                //上面3行代码可以优化为一行代码,如下
                //cards.add(new Card(j,suit[i]));
            }
        }
        return cards;
    }
    private static void swap(List<Card> cards,int i,int j){
    
    //交换 下标为i的牌和下标为j(随机生成数)的牌
        //类似于数组元素交换中的
        //Card tmp=cards[i];
        Card tmp= cards.get(i);

        //cards[i]=cards[j]
        cards.set(i, cards.get(j));

        //cards[j]=tmp;
        cards.set(j,tmp);
        //注意!!!上面三行注释是给你一个形象的比喻,我们是面向对象的交换,终究不是简单的数组元素交换

    }
    private static void shuffle(List<Card> cards){
    
    
        //直接通过makeCard()方法出来的扑克牌是有序的,
        //但现实里一般扑克牌都是乱序的,也就是常说的洗牌
        int size= cards.size();//共多少张牌
        for(int i=size-1;i>0;i--){
    
    //保证每张牌都洗过,
            // i=size-1是牌下标最多到size-1,
            // i>0是因为下面的random.next(i);i是生成0-(i-1)的数字,i-1>=0
            Random random=new Random();
            int rand=random.nextInt(i);//生成0-9的下标,传n进去,生成0-(n-1)的数字(下标),共n个数
            swap(cards,i,rand);
        }


    }
    public static void main(String[] args) {
    
    
        List<Card>cards= makeCard();//来一副“有顺序”的牌
        System.out.println(cards);//打印“有顺序”的牌
        shuffle(cards);//洗牌
        System.out.println(cards);//打印“洗过牌”的牌
    }
}

运行结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_57180439/article/details/122385601