java实现顺序表洗牌算法

本文详细描述了一个基于Java的卡牌游戏实现,涉及Card类定义牌的信息,Cards类包含生成牌、洗牌和分配牌的方法,以及TestCard类展示了整个流程。
摘要由CSDN通过智能技术生成

目录

1.基本框架的实现

2.Card类中是包含每一张牌的信息

3.Cards类包含了各种方法

4.TestCard类是主要流程的实现


1.基本框架的实现

1.首先要生成一副有顺序的新牌,通过实现方法来有序的生成

2.每张牌都是有数字和花色组成。

3.通过实现方法去将牌的顺序打乱,

4.定义三个牌栏表示每个人抽取的牌

2.Card类中是包含每一张牌的信息
public class Card {
    public int number;//数字
    public String suit;//花色

    public Card(int number, String suit) {
        this.number = number;//数字
        this.suit = suit;
    }

    @Override
    public String toString() {
        return "{"+suit+" "+number+"}";
    }
}
3.Cards类包含了各种方法
public class Cards {

//定义一个数字储存每一种花色,以便以后生成牌时所需
    public static final String[] suits = {"♠","♥","♣","♦"};

//生成牌的方法,这里只生成52张牌,不包含大小王
    public List<Card> BuyCard(){

        List<Card> list = new ArrayList<>();//用来储存生产的牌

        for (int i = 0; i < 4; i++) {
            for (int j = 1; j <13 ; j++) {
                String suit = suits[i];
                Card card = new Card(j,suit);//每次生成的一张牌

                list.add(card);//将牌添加
            }
        }
        return list;
    }


交换下标不同的两张牌,以便后来打乱牌的顺序
    public  void swap(List<Card> list,int i,int j){
        Card temp = list.get(j);

        list.set(j,list.get(i));//这里使用的时List自带的方法get();
        list.set(i,temp);
    }



    public void shuff(List<Card> list){

        Random random = new Random();

        for (int i =list.size()-1;i>0; i--) {

            int index = random.nextInt(i);//生成范围为i~0之间的随机数,作为牌的下标,

            //将下表为i和index的牌交换
            swap(list,i,index);
        }
    }

    public void Deaw(List<Card> cardList) {

//生成三个空的顺序表,用来储存每个抓到的牌
        List<Card> hand1 = new ArrayList<>();
        List<Card> hand2 = new ArrayList<>();
        List<Card> hand3 = new ArrayList<>();

//hands表示一个二维的顺序表,每个元素又是一个顺序表,它的成员为三个顺序表
        List<List<Card>> hands = new ArrayList<>();
        hands.add(hand1);
        hands.add(hand2);
        hands.add(hand3);

        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {

                //每次抓取洗好的牌的第一张
                Card card = cardList.remove(0);

                //二位顺序表中,按序获取每个顺序表,将牌放在表中
                hands.get(j).add(card);
            }
        }

        //打印每个人的牌
        System.out.println("第1个人的牌:" + hand1);
        System.out.println("第2个人的牌:" + hand2);
        System.out.println("第3个人的牌:" + hand3);
    }
}
4.TestCard类是主要流程的实现
public class TestCard {
    public static void main(String[] args) {

//生成一个Cards类,以便使用其中的方法
        Cards cards  =  new Cards();

//生成一副有序的牌
        List<Card> cardList = cards.BuyCard();

//打印生产的牌
        System.out.println(cardList);

        System.out.println("洗牌之前");
        System.out.println(cardList);

        System.out.println("洗牌之后:");
//将牌的顺序打乱
        cards.shuff(cardList);
        System.out.println(cardList);
//抓牌
        System.out.println("抓拍");
        cards.Deaw(cardList);

//打印的剩下的牌
        System.out.println("剩下的牌");
        System.out.println(cardList);
    }
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值