首页 > 编程语言 >【java-数据结构篇】神奇 ArrayList,一键打印扑克牌花色与点数

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

时间:2025-01-04 17:34:04浏览次数:3  
标签:java String deck ArrayList 一键 suit new Card

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
我的个人主页
我的专栏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;
        }

}

标签:java,String,deck,ArrayList,一键,suit,new,Card
From: https://blog.csdn.net/2301_80350265/article/details/144926805

相关文章

  • [2615]基于JAVA的纸箱销售智慧管理系统的设计与实现
    毕业设计(论文)开题报告表姓名学院专业班级题目基于JAVA的纸箱销售智慧管理系统的设计与实现指导老师(一)选题的背景和意义在当前信息化时代,企业管理和运营方式正在经历着深刻的变革。随着大数据、云计算等技术的发展,智慧管理系统的应用日益广泛。然而,在纸箱销售行业,许多企......
  • java饲料出售平台论文+源码 2025毕设
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容饲料出售平台研究相关内容一、研究背景随着畜牧业、渔业等相关产业的不断发展,饲料的需求日益增长。当前市场上饲料供应与需求之间的信息对接存在一定的障碍,......
  • java高校班主任班级管理系统论文+源码 2025毕设
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景在当今的高校教育环境中,随着高校规模的不断扩大和学生人数的日益增多,传统的班级管理方式面临着诸多挑战。高校班主任作为班级管理的核心人物,需要......
  • AutoGeaconC2:一款一键读取Profile自动化生成geacon实现跨平台上线CobaltStrike
    CobaltStrike是渗透测试中常用的一款基于C2框架的攻击工具。生成Windowspayload也很方便。但在CobaltStrike中如何上线Linux设备呢❓AutoGeaconC2是一款一键读取Profile自动化生成geacon实现跨平台上线CobaltStrike。目前仅支持Linuxamd64上线。使用首先下载releases中的Aut......
  • 高校就业招聘小程序|Java|SpringBoot|VUE| 前后端分离
                  【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SpringBoot、Mybatis-Plus、VUE、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apa......
  • 流浪动物领养小程序|Java|SpringBoot|VUE| 前后端分离
                  【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SpringBoot、Mybatis-Plus、VUE、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apa......
  • 机电公司小程序|Java|SpringBoot|VUE| 前后端分离
                  【技术栈】1⃣️:架构:B/S、MVC2⃣️:系统环境:Windowsh/Mac3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7+4⃣️:技术栈:Java、Mysql、SpringBoot、Mybatis-Plus、VUE、jquery,html5⃣️数据库可视化工具:navicat6⃣️服务器:SpringBoot自带apa......
  • 开发规范JAVA-v1.0_.241127
    一、编程规约(一)命名风格【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。反例:_name/_name/$Object/name/name$/Object$【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。说明:正确的英文拼写和......
  • 基于Java的springboot/SSM+vue.js+uniapp小程序的4S店车辆管理系统附带文章源码部署视
    文章目录前言详细视频演示具体实现截图后端框架SpringBoot前端框架Vue持久层框架MyBaits为什么选择我代码参考数据库参考测试用例参考源码获取前言......
  • 基于Java的springboot/SSM+vue.js+uniapp小程序的物流系统附带文章源码部署视频讲解等
    文章目录前言详细视频演示具体实现截图后端框架SpringBoot前端框架Vue持久层框架MyBaits为什么选择我代码参考数据库参考测试用例参考源码获取前言......