数据结构之有趣的扑克牌(出牌吧!!)

题外话

这不是魔法,而是科学小实验!!!

请大家多多支持我,我真的真的太想进步了啊!!!!

正题

扑克牌代码思路

1.代码分为买牌,洗牌还有发牌(三个人每个人五张牌)

2.要熟练掌握javase初阶和数据结构中的ArrayList类

扑克牌代码以及代码详解

package Card;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class CardDemo {
    //先设置四种花色,因为扑克牌花色就四种,所以设置为静态常量
    private final String[] suit={"♠","♣","♥","♦"};
    //1.买牌(没有大小王)共52张牌
public List<Card> buyCard()
{
    //把卡牌全部放入ArrayList中
        List cardList=new ArrayList();
        //i代表四种花色,j代表13张卡牌
        for (int i=0;i<4;i++)
        {
            for (int j=1;j<=13;j++)
            {
                //利用构造方法把扑克牌创建出来放入Card数组,最后放入cardList中
                Card card=new Card(suit[i],j);
                cardList.add(card);
            }
        }
        return cardList;
}
//2.洗牌
public void shuffle(List<Card> cardList)
{
    //先创建Random这个类的对象
    Random random=new Random();
    //洗牌利用交换swap方法洗牌,从51下标开始到0下标结束(0下标不需要交换)
    for (int i=cardList.size()-1;i>0;i--)
    {
        //random.nextInt(i)是指从0-51(包括0,不包括51)随机选一个数字
       int index=random.nextInt(i);
       //把随机选的数字的下标和i下标交换牌值,这里交换swap函数交换的是cardList的i下标和index下标对应的值
       swap(cardList,i,index);
    }

}
//因为交换swap方法只作用于此类,所以就可以封装起来
private void swap(List<Card> cardList,int i,int j)
{           //利用get方法,把cardList的i下标位置的值放入tmp
           Card tmp=cardList.get(i);
           //利用set方法,再利用get方法,把carrdList的j下标位置的值付给
           cardList.set(i,cardList.get(j));
           //用set方法,把tmp的值放到j下标位置
           cardList.set(j,tmp);

}
//三个人一人抓五张牌
public void getCard(List<Card> cardList)
{
    //创建三个对象,代表的就是三个人
    List<Card> list1=new ArrayList();
    List<Card> list2=new ArrayList();
    List<Card> list3=new ArrayList();
    //创建相当于二维数组,把每个人都放进去,一个人相当于一个一维数组
    List<List<Card>> hands=new ArrayList<>();
    hands.add(list1);
    hands.add(list2);
    hands.add(list3);
    //一个人发五张牌
    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个人揭牌如下:");
    System.out.println(list1);
    System.out.println("第2个人揭牌如下:");
    System.out.println(list2);
    System.out.println("第3个人揭牌如下:");
    System.out.println(list3);
    //剩下的牌
    System.out.println("牌堆如下");
    System.out.println(cardList);
}
}

代码运行

小结

记住主要思维逻辑,然后再自己不看代码输入一遍,记得把昨天的杨辉三角打一遍复习一下哦!!!

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值