【java-数据结构篇】神奇 ArrayList,一键打印扑克牌花色与点数

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
我的个人主页
我的专栏:Java-数据结构 ,希望能帮助到大家!!!点赞❤ 收藏❤

前言:
在编程的奇妙世界里,数据结构如同精巧的积木,搭建起各类功能的大厦。而 ArrayList,作为其中一块极为实用的 “积木”,拥有着独特的魅力与强大的功能。
当我们将目光投向生活中的趣味场景 —— 扑克牌时,你或许想不到,ArrayList 能在其中大显身手。本书(或本文档)就将带你走进这个融合了技术与趣味的领域,一同探索如何运用 ArrayList 来实现扑克牌的打印。
无论是初涉编程的新手,渴望通过一个具体又有趣的项目开启编程之旅;还是已经在编程之路上奋进的学习者,想要深入理解数据结构在实际应用中的精妙之处;亦或是单纯对科技如何改变生活日常持有好奇心的朋友,在这里,你都能找到满足求知欲的内容。我们将从基础的 ArrayList 知识讲起,逐步深入到扑克牌打印的每一个细节,包括算法设计、代码实现,见证数字世界里扑克牌的 “诞生” 过程,开启这场知识与乐趣交织的探索吧。


一:实现打印扑克牌

相关代码:

```java
package ArrayList;

import java.util.ArrayList;

//这个类对象表示一张扑克牌
class Card {
    private String suit;//表示花色
    private String rank;//表示点数
    public Card(String suit, String rank) {
        this.suit = suit;
        this.rank = rank;
    }

    public String getSuit() {
        return suit;
    }

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

    public String getRank() {
        return rank;
    }

    public void setRank(String rank) {
        this.rank = rank;
    }
    public String toString() {
        return "("+this.suit+" "+this.rank+ ")";
    }
}
public class demo1 {
    public static void main(String[] args) {
        //表示一副扑克牌
        ArrayList deck=createDeck();
        System.out.println(deck);
    }
        public static ArrayList createDeck(){
        //创建一副扑克牌
        ArrayList deck=new ArrayList<>();
        String[] suits={"♥","♣","♦","♠"};
            for(String suit:suits){
            //在每个花色中生成对应点数的牌
            for(int i=2;i<=10;i++){
                Card card = new Card(suit,""+i);
                deck.add(card);
            }
            Card cardJ=new Card(suit,"J");
            Card cardQ=new Card(suit,"Q");
            Card cardK=new Card(suit,"K");
            Card cardA=new Card(suit,"A");
            deck.add(cardJ);
            deck.add(cardQ);
            deck.add(cardK);
            deck.add(cardA);
        }
           return deck;
        }

}

```

最终效果呈现:
在这里插入图片描述

二:实现洗牌效果

可以使用Java中标准库自带的包Collections,直接进行洗牌。

效果如下:
在这里插入图片描述
自己实现洗牌
相关代码:

```java
public static void shuffle(ArrayList deck){
        //把整个ArrayList从后往前遍历
        //针对每一次取到的一张牌,就生成一个随机下标,拿到当前位置的牌和随机位置下标的牌,进行交换。
        Random random=new Random();
        for(int i=deck.size()-1;i>0;i--){
            int j= random.nextInt(deck.size());
            //交换两张牌位置
            Card tmp=new Card(deck.get(i).getSuit(),deck.get(i).getRank());
            deck.set(i,deck.get(j));
            deck.set(j,tmp);
        }
    }

```

效果如下
在这里插入图片描述

三:实现发牌

相关代码:

```java
//发牌,假设有三个人,每个人五张牌
        ArrayList> hands=new ArrayList>();
        //ArrayList handCards=new ArrayList();
        //先创建三个人手里的牌ArrayList
        for(int i=0;i<3;i++){
            ArrayList hand=new ArrayList();
            hands.add(hand);
        }
        for(int i=0;i<5;i++){
            for(int j=0;j<3;j++){
                //发牌是轮流的过程
                ArrayList 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));
        }
    }

```

效果图:
在这里插入图片描述

四:全部代码

```java
package ArrayList;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
//每个玩家的手牌
    class HandCard{
        private ArrayList cards;
}
//这个类对象表示一张扑克牌
class Card {
    private String suit;//表示花色
    private String rank;//表示点数
    public Card(String suit, String rank) {
        this.suit = suit;
        this.rank = rank;
    }

    public String getSuit() {
        return suit;
    }

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

    public String getRank() {
        return rank;
    }

    public void setRank(String rank) {
        this.rank = rank;
    }
    public String toString() {
        return "("+this.suit+" "+this.rank+ ")";
    }
}
public class demo1 {
    public static void main(String[] args) {
        //表示一副扑克牌
        ArrayList deck=createDeck();
        System.out.println("原始的牌:" +deck);
       // Collections.shuffle(deck);
        shuffle(deck);
        System.out.println("洗牌之后:"+deck);
        //发牌,假设有三个人,每个人五张牌
        ArrayList> hands=new ArrayList>();
        //ArrayList handCards=new ArrayList();
        //先创建三个人手里的牌ArrayList
        for(int i=0;i<3;i++){
            ArrayList hand=new ArrayList();
            hands.add(hand);
        }
        for(int i=0;i<5;i++){
            for(int j=0;j<3;j++){
                //发牌是轮流的过程
                ArrayList 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));
        }
    }
    //自己实现洗牌
    public static void shuffle(ArrayList deck){
        //把整个ArrayList从后往前遍历
        //针对每一次取到的一张牌,就生成一个随机下标,拿到当前位置的牌和随机位置下标的牌,进行交换。
        Random random=new Random();
        for(int i=deck.size()-1;i>0;i--){
            int j= random.nextInt(deck.size());
            //交换两张牌位置
            Card tmp=new Card(deck.get(i).getSuit(),deck.get(i).getRank());
            deck.set(i,deck.get(j));
            deck.set(j,tmp);
        }
    }
        public static ArrayList createDeck(){
        //创建一副扑克牌
        ArrayList deck=new ArrayList<>();
        String[] suits={"♥","♣","♦","♠"};
            for(String suit:suits){
            //在每个花色中生成对应点数的牌
            for(int i=2;i<=10;i++){
                Card card = new Card(suit,""+i);
                deck.add(card);
            }
            Card cardJ=new Card(suit,"J");
            Card cardQ=new Card(suit,"Q");
            Card cardK=new Card(suit,"K");
            Card cardA=new Card(suit,"A");
            deck.add(cardJ);
            deck.add(cardQ);
            deck.add(cardK);
            deck.add(cardA);
        }
           return deck;
        }

}


```

相关文章

暂无评论

暂无评论...