【java-数据结构篇】神奇 ArrayList,一键打印扑克牌花色与点数
我的个人主页
我的专栏:Java-数据结构,希望能帮助到大家!!!点赞❤ 收藏❤
前言:
在编程的奇妙世界里,数据结构如同精巧的积木,搭建起各类功能的大厦。而 ArrayList,作为其中一块极为实用的 “积木”,拥有着独特的魅力与强大的功能。
当我们将目光投向生活中的趣味场景 —— 扑克牌时,你或许想不到,ArrayList 能在其中大显身手。本书(或本文档)就将带你走进这个融合了技术与趣味的领域,一同探索如何运用 ArrayList 来实现扑克牌的打印。
无论是初涉编程的新手,渴望通过一个具体又有趣的项目开启编程之旅;还是已经在编程之路上奋进的学习者,想要深入理解数据结构在实际应用中的精妙之处;亦或是单纯对科技如何改变生活日常持有好奇心的朋友,在这里,你都能找到满足求知欲的内容。我们将从基础的 ArrayList 知识讲起,逐步深入到扑克牌打印的每一个细节,包括算法设计、代码实现,见证数字世界里扑克牌的 “诞生” 过程,开启这场知识与乐趣交织的探索吧。
一:实现打印扑克牌
相关代码:
packageArrayList;importjava.util.ArrayList;//这个类对象表示一张扑克牌classCard{privateString suit;//表示花色privateString rank;//表示点数publicCard(String suit,String rank){this.suit = suit;this.rank = rank;}publicStringgetSuit(){return suit;}publicvoidsetSuit(String suit){this.suit = suit;}publicStringgetRank(){return rank;}publicvoidsetRank(String rank){this.rank = rank;}publicStringtoString(){return"("+this.suit+" "+this.rank+")";}}publicclass demo1 {publicstaticvoidmain(String[] args){//表示一副扑克牌ArrayList<Card> deck=createDeck();System.out.println(deck);}publicstaticArrayList<Card>createDeck(){//创建一副扑克牌ArrayList<Card> deck=newArrayList<>();String[] suits={"♥","♣","♦","♠"};for(String suit:suits){//在每个花色中生成对应点数的牌for(int i=2;i<=10;i++){Card card =newCard(suit,""+i); deck.add(card);}Card cardJ=newCard(suit,"J");Card cardQ=newCard(suit,"Q");Card cardK=newCard(suit,"K");Card cardA=newCard(suit,"A"); deck.add(cardJ); deck.add(cardQ); deck.add(cardK); deck.add(cardA);}return deck;}}最终效果呈现:

二:实现洗牌效果
可以使用Java中标准库自带的包Collections,直接进行洗牌。
效果如下:

自己实现洗牌
相关代码:
publicstaticvoidshuffle(ArrayList<Card> deck){//把整个ArrayList从后往前遍历//针对每一次取到的一张牌,就生成一个随机下标,拿到当前位置的牌和随机位置下标的牌,进行交换。Random random=newRandom();for(int i=deck.size()-1;i>0;i--){int j= random.nextInt(deck.size());//交换两张牌位置Card tmp=newCard(deck.get(i).getSuit(),deck.get(i).getRank()); deck.set(i,deck.get(j)); deck.set(j,tmp);}}效果如下

三:实现发牌
相关代码:
//发牌,假设有三个人,每个人五张牌ArrayList<ArrayList<Card>> hands=newArrayList<ArrayList<Card>>();//ArrayList<HandCard> handCards=new ArrayList<HandCard>();//先创建三个人手里的牌ArrayListfor(int i=0;i<3;i++){ArrayList<Card> hand=newArrayList<Card>(); hands.add(hand);}for(int i=0;i<5;i++){for(int j=0;j<3;j++){//发牌是轮流的过程ArrayList<Card> currentHand=hands.get(j);Card card=deck.remove(0); currentHand.add(card);}}//打印每个人的首牌for(int i=0;i<3;i++){System.out.println("第"+i+"个人的牌"+hands.get(i));}}效果图:

四:全部代码
packageArrayList;importjava.util.ArrayList;importjava.util.Collections;importjava.util.Random;//每个玩家的手牌classHandCard{privateArrayList<Card> cards;}//这个类对象表示一张扑克牌classCard{privateString suit;//表示花色privateString rank;//表示点数publicCard(String suit,String rank){this.suit = suit;this.rank = rank;}publicStringgetSuit(){return suit;}publicvoidsetSuit(String suit){this.suit = suit;}publicStringgetRank(){return rank;}publicvoidsetRank(String rank){this.rank = rank;}publicStringtoString(){return"("+this.suit+" "+this.rank+")";}}publicclass demo1 {publicstaticvoidmain(String[] args){//表示一副扑克牌ArrayList<Card> deck=createDeck();System.out.println("原始的牌:"+deck);// Collections.shuffle(deck);shuffle(deck);System.out.println("洗牌之后:"+deck);//发牌,假设有三个人,每个人五张牌ArrayList<ArrayList<Card>> hands=newArrayList<ArrayList<Card>>();//ArrayList<HandCard> handCards=new ArrayList<HandCard>();//先创建三个人手里的牌ArrayListfor(int i=0;i<3;i++){ArrayList<Card> hand=newArrayList<Card>(); hands.add(hand);}for(int i=0;i<5;i++){for(int j=0;j<3;j++){//发牌是轮流的过程ArrayList<Card> currentHand=hands.get(j);Card card=deck.remove(0); currentHand.add(card);}}//打印每个人的首牌for(int i=0;i<3;i++){System.out.println("第"+i+"个人的牌"+hands.get(i));}}//自己实现洗牌publicstaticvoidshuffle(ArrayList<Card> deck){//把整个ArrayList从后往前遍历//针对每一次取到的一张牌,就生成一个随机下标,拿到当前位置的牌和随机位置下标的牌,进行交换。Random random=newRandom();for(int i=deck.size()-1;i>0;i--){int j= random.nextInt(deck.size());//交换两张牌位置Card tmp=newCard(deck.get(i).getSuit(),deck.get(i).getRank()); deck.set(i,deck.get(j)); deck.set(j,tmp);}}publicstaticArrayList<Card>createDeck(){//创建一副扑克牌ArrayList<Card> deck=newArrayList<>();String[] suits={"♥","♣","♦","♠"};for(String suit:suits){//在每个花色中生成对应点数的牌for(int i=2;i<=10;i++){Card card =newCard(suit,""+i); deck.add(card);}Card cardJ=newCard(suit,"J");Card cardQ=newCard(suit,"Q");Card cardK=newCard(suit,"K");Card cardA=newCard(suit,"A"); deck.add(cardJ); deck.add(cardQ); deck.add(cardK); deck.add(cardA);}return deck;}}