我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java-扑克牌的创建以及发放

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java-扑克牌的创建以及发放

Java-扑克牌的创建以及发放

大家好,我是晓星航。今天为大家带来的是 Java-扑克牌的创建以及发放的讲解!😀

题目:创建一个扑克牌(不需要包含大小王),分别分发给3个人,一个人发5张牌,输出结果要求包含全套牌(52张牌),以及3个人各自的牌的花色以及数字。

1.扑克牌的源代码

import java.util.ArrayList;import java.util.List;import java.util.Random;class Card {    private int rank;//数字    private String suit;//花色    public Card(int rank, String suit) {        this.rank = rank;        this.suit = suit;    }    @Override    public String toString() {        return "[ 花色:"+this.suit+" "+this.rank+" ]";    }}//没有大小王:1,2,3,4,5,6,7,8,9,10,11,12,13public class TestDemo {    private static final String[] suits = {"♥","♠","♣","♦"};    public static List<Card> buyCard() {        ArrayList<Card> cards = new ArrayList<>();        for (int i = 0; i < 4; i++) {            for (int j = 1; j <= 13; j++) {                cards.add(new Card(j,suits[i]));            }        }        return cards;    }    private static void swap(List<Card> cards,int i,int j) {//      Card tmp = cards[i];        Card tmp = cards.get(i);//      cards[i] = cards[j];        cards.set(i,cards.get(j));//      cards[j] = tmp;        cards.set(j,tmp);    }    public static void shuffle(List<Card> cards) {        int size = cards.size();        for (int i = size-1; i > 0; i--) {            Random random = new Random();            int rand = random.nextInt(i);            swap(cards,i,rand);        }    }    //扑克牌:    public static void main(String[] args) {        List<Card> cards = buyCard();        System.out.println("买牌:"+cards);        shuffle(cards);        System.out.println("洗牌:"+cards);        System.out.println("接牌:3个人每个人轮流接5张牌");        ArrayList<List<Card>> hand = new ArrayList<>();        List<Card> hand1 = new ArrayList<>();        List<Card> hand2 = new ArrayList<>();        List<Card> hand3 = new ArrayList<>();        hand.add(hand1);        hand.add(hand2);        hand.add(hand3);        for (int i = 0; i < 5; i++) {            for (int j = 0; j < 3; j++) {                Card card = cards.remove(0);                hand.get(j).add(card);            }        }        System.out.println("第1个人的牌: "+hand1);        System.out.println("第2个人的牌: "+hand2);        System.out.println("第3个人的牌: "+hand3);        System.out.println("剩下的牌: "+cards);    }

2.扑克牌运行结果

3.扑克牌代码创建原理讲解

3.1创建扑克牌前的准备工作

class Card {    private int rank;//数字    private String suit;//花色    public Card(int rank, String suit) {        this.rank = rank;        this.suit = suit;    }    @Override    public String toString() {        return "[ 花色:"+this.suit+" "+this.rank+" ]";    }}

这为后续扑克牌的花色以及数字大小创建了类。

    public static void main(String[] args) {        List<Card> cards = buyCard();        System.out.println("买牌:"+cards);        shuffle(cards);        System.out.println("洗牌:"+cards);        System.out.println("接牌:3个人每个人轮流接5张牌");                System.out.println("第1个人的牌: "+hand1);        System.out.println("第2个人的牌: "+hand2);        System.out.println("第3个人的牌: "+hand3);        System.out.println("剩下的牌: "+cards);    }}

这里我们写好了我们扑克牌的基本菜单逻辑,即买牌(52张),再洗牌(打乱牌),最后将所有牌分发给玩游戏的三个人(每人五张)。

3.2 52张扑克牌的创建(除去大小王)

    public static List<Card> buyCard() {        ArrayList<Card> cards = new ArrayList<>();        for (int i = 0; i < 4; i++) {            for (int j = 1; j <= 13; j++) {                cards.add(new Card(j,suits[i]));            }        }        return cards;    }

这里我们定义了buyCard方法来创建我们的52张牌,cards是我们存放卡牌的位置(包含数字以及花色),通过双循环来创建我们梅花♣、方片♦、红桃♥和黑桃♠这四种牌。

3.3洗牌

    private static void swap(List<Card> cards,int i,int j) {//      Card tmp = cards[i];        Card tmp = cards.get(i);//      cards[i] = cards[j];        cards.set(i,cards.get(j));//      cards[j] = tmp;        cards.set(j,tmp);    }    public static void shuffle(List<Card> cards) {        int size = cards.size();        for (int i = size-1; i > 0; i--) {            Random random = new Random();            int rand = random.nextInt(i);            swap(cards,i,rand);        }    }

在写我们的shuffle洗牌方法前我们写了swap交换方法,其中swap使用的是空瓶交换原理通过List中get方法来交换数值以及相对应的花色。

而shuffle方法我们则用了size来代表我们卡牌的数量,通过random随机方法来生成随机数传给我们swap交换方法当作形参从而完成我们扑克牌的洗牌。

3.4发牌

System.out.println("接牌:3个人每个人轮流接5张牌");ArrayList<List<Card>> hand = new ArrayList<>();List<Card> hand1 = new ArrayList<>();List<Card> hand2 = new ArrayList<>();List<Card> hand3 = new ArrayList<>();hand.add(hand1);hand.add(hand2);hand.add(hand3);for (int i = 0; i < 5; i++) {    for (int j = 0; j < 3; j++) {        Card card = cards.remove(0);        hand.get(j).add(card);    }}System.out.println("第1个人的牌: "+hand1);System.out.println("第2个人的牌: "+hand2);System.out.println("第3个人的牌: "+hand3);System.out.println("剩下的牌: "+cards);

在创建好牌和洗完牌之后当然就是我们的发牌了,我们发牌采取了创建hand的动态数组来储存我们的牌,然后我们创建了hand1、hand2以及hand3的三个动态数组来分别表示我们的三个人,通过两次循环达到3个人每个人轮流接5张牌的目的。

最后完成的效果图如下:

感谢各位读者的阅读,本文章有任何错误都可以在评论区发表你们的意见,我会对文章进行改正的。如果本文章对你有帮助请动一动你们敏捷的小手点一点赞,你的每一次鼓励都是作者创作的动力哦!😘

来源地址:https://blog.csdn.net/xinhang10/article/details/129249979

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Java-扑克牌的创建以及发放

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Java实现扑克牌的创建以及发放

在java当中生成一副牌有很多种方法,有简单易于理解的面向过程编程,也有面向对象模块化编程,下面这篇文章主要给大家介绍了关于Java实现扑克牌的创建以及发放的相关资料,需要的朋友可以参考下
2023-03-07

Java如何实现扑克牌的创建及发放

这篇文章主要讲解了“Java如何实现扑克牌的创建及发放”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java如何实现扑克牌的创建及发放”吧!题目:创建一个扑克牌(不需要包含大小王),分别分发
2023-07-05

java存储以及java对象创建的流程(详解)

java存储:1)寄存器:这是最快的存储区,位于处理器的内部。但是寄存器的数量有限,所以寄存器根据需求进行分配。我们不能直接进行操作。2)堆栈:位于通用RAM中,可以通过堆栈指针从处理器那里获取直接支持。堆栈指针往下移动,则分配新的内存。网
2023-05-31

触发器的概念及其语法/创建触发器/查看以及删除

触发器可以简单理解一种特殊的存储过程,之前存储过程的变量定义及流程语句同样适合触发器,唯一不同的是我们只需要定义触发器,而不用手动调用触发器。从事件触发的角度来说,触发器编写的过程就是触发事件定义的过程,因为触发器定义好后会随着数据库操作命令的执行而触发,这些
触发器的概念及其语法/创建触发器/查看以及删除
2021-11-25

Java微信公众平台开发(3) 接收消息的分类及实体的创建

前面一篇有说道应用服务器和腾讯服务器是通过消息进行通讯的,并简单介绍了微信端post的消息类型,这里我们将建立消息实体以方便我们后面的使用!(一)消息实体基础类package com.cuiyongzhi.wechat.message.re
2023-05-31

Java微信公众平台开发(4) 回复消息的分类及实体的创建

前面有说道对接收到微信服务器消息后对消息的分类,当时主要分为普通消息和事件消息,这里我们要讲述的是我们在给用户回复的消息类型,在这里也可以大致分为两类:一种为不需要上传资源到微信服务器的这里成为【普通消息回复】;还有一种需要上传资源到微信服
2023-05-31

如何使用vbs右键发送sendto以及创建快捷方式到自定义的位置

这篇文章主要介绍了如何使用vbs右键发送sendto以及创建快捷方式到自定义的位置,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。在SendTo文件夹里加上一文件夹的快捷方式后
2023-06-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录