首页 > 基础资料 博客日记

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

2025-01-06 21:00:07基础资料围观64

Java资料网推荐【java-数据结构篇】神奇 ArrayList,一键打印扑克牌花色与点数这篇文章给大家,欢迎收藏Java资料网享受知识的乐趣



我的个人主页
我的专栏Java-数据结构,希望能帮助到大家!!!点赞❤ 收藏❤

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


一:实现打印扑克牌

相关代码:

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<Card> deck=createDeck();
        System.out.println(deck);
    }
        public static ArrayList<Card> createDeck(){
        //创建一副扑克牌
        ArrayList<Card> 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,直接进行洗牌。

效果如下:

自己实现洗牌
相关代码:

public static void shuffle(ArrayList<Card> 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);
        }
    }

效果如下

三:实现发牌

相关代码:

//发牌,假设有三个人,每个人五张牌
        ArrayList<ArrayList<Card>> hands=new ArrayList<ArrayList<Card>>();
        //ArrayList<HandCard> handCards=new ArrayList<HandCard>();
        //先创建三个人手里的牌ArrayList
        for(int i=0;i<3;i++){
            ArrayList<Card> hand=new ArrayList<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));
        }
    }

效果图:

四:全部代码

package ArrayList;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
//每个玩家的手牌
    class HandCard{
        private ArrayList<Card> 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<Card> deck=createDeck();
        System.out.println("原始的牌:" +deck);
       // Collections.shuffle(deck);
        shuffle(deck);
        System.out.println("洗牌之后:"+deck);
        //发牌,假设有三个人,每个人五张牌
        ArrayList<ArrayList<Card>> hands=new ArrayList<ArrayList<Card>>();
        //ArrayList<HandCard> handCards=new ArrayList<HandCard>();
        //先创建三个人手里的牌ArrayList
        for(int i=0;i<3;i++){
            ArrayList<Card> hand=new ArrayList<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));
        }
    }
    //自己实现洗牌
    public static void shuffle(ArrayList<Card> 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<Card> createDeck(){
        //创建一副扑克牌
        ArrayList<Card> 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;
        }

}


文章来源:https://blog.csdn.net/2301_80350265/article/details/144926805
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!

标签:

相关文章

本站推荐

标签云