利用Java集合框架中的List实现洗牌摸牌情景应用

一、Java集合框架中的List

        Java集合框架中的List及其子集合类实现了ArrayList(顺序表)LinkedList(链表)等数据结构,通过List等集合类可以实现发牌时洗牌摸牌情景的应用。

二、代码结构

1.Card:牌类。

2.Cards:桌面牌堆类:实现生成牌,洗牌,摸牌等操作。

3.Test:测试类:测试项目效果。

三、程序源码

1.Card:牌类:

//Card类,代表牌
public class Card {
    private int rank; //数字
    private String suit;//花色

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

    //重写toString方法,供print方法打印Arraylist对象时使用
    @Override
    public String toString() {
        return "{"+suit+" "+rank+"}";
    }
}

2.Cards:桌面牌堆类:

(1)定义

public class Cards

(2)成员变量

private static final String[] suits={"♥","♠","♦","♣"};

包括红桃、黑桃、方片、梅花四种花色。

(3)相关方法

1)生成牌堆方法

//按序生成牌堆方法
    public List<Card> loadCard() {
        //生成牌堆
        List<Card> cardList = new ArrayList<>();
        //四种花色
        for(int i=0;i<4;i++){
            //13张牌(11,12,13以数字代替,且不含大小王)
            for(int j=1;j<=13;j++){
                //按序添加卡牌
                cardList.add(new Card(j,suits[i]));
            }
        }
        return cardList;
    }

2)洗牌方法(通过随机交换排序实现洗牌)

//洗牌方法
    public void shuffle(List<Card> cardList){
        Random random=new Random();
        for(int i=cardList.size()-1;i>0;i--){
            //调用random的nextInt方法生成随机数
            int randIndex= random.nextInt(i);
            swapCard(cardList,i,randIndex);
        }
    }

    //换牌方法,供shuffle洗牌方法使用
    private void swapCard(List<Card> cardList,int i,int j){
        Card tmp=cardList.get(i);
        cardList.set(i,cardList.get(j));
        cardList.set(j,tmp);
    }

应当注意的是导入Random包,否则Random标识符编译器无法识别,即:

import java.util.Random;

3)摸牌方法

//抓牌方法
    public void drawCard(List<Card> cardList){
        //生成每个人手上的牌堆
        List<Card> hand1=new ArrayList<>();
        List<Card> hand2=new ArrayList<>();
        List<Card> hand3=new ArrayList<>();
        //生成三个人手上的牌堆序列
        List<List<Card>> hands=new ArrayList<>();
        hands.add(hand1);
        hands.add(hand2);
        hands.add(hand3);

        for(int i=0;i<5;i++){
            //总共抓5轮
            for(int j=0;j<3;j++){
                //每轮三人抓牌

                //每次每人从桌面牌堆上的第一张摸牌,所以remove后参数为0
                Card card=cardList.remove(0);
                //currentHand表示当前摸牌人
                List<Card>currentHand=hands.get(j);
                currentHand.add(card);
            }
        }
        //展示每个人摸到的牌
        for(int i=0;i< hands.size();i++) {
            System.out.println("第"+(i+1)+"个人的牌为" + hands.get(i));
        }
    }

四、项目示例

在Test的main方法中测试项目代码。

import java.util.List;
//注意导入List路径

public class Test {
    public static void main(String[] args) {
        //生成桌面牌堆
        Cards cards=new Cards();
        List<Card> cardList=cards.loadCard();
        System.out.println("洗牌前:"+cardList);
        //洗牌
        cards.shuffle(cardList);
        System.out.println("洗牌后:"+cardList);
        //摸牌
        cards.drawCard(cardList);
    }
}

结果如下:

五、小结

以上便是通过Java集合框架List实现洗牌摸牌情景的应用的全部代码,如有不当,敬请斧正!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值