简单的洗牌算法(Java)

news2024/12/22 22:57:23

目录

  • 一、问题
  • 二、创建一个Poker类
  • 三、完成游戏内容
  • 四、测试
  • 五、总结

简单的洗牌算法是对ArrayList的具体使用

一、问题

我们需要一副完整的扑克牌,除去大小王一共52张牌,参与游戏的玩家共3名,在洗牌后分发每名玩家5张扑克牌。
在这里插入图片描述

二、创建一个Poker类

描述扑克牌的属性为花色和数字,我们对其进行封装,再重写 toString方法

public class Poker {
    private String suit;//花色
    private int rank;//数字

    public Poker(String suit, int rank) {
        this.suit = suit;
        this.rank = rank;
    }

    @Override
    public String toString() {
        return "{"+suit+" "+rank+"}";
    }

    public String getSuit() {
        return suit;
    }

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

    public int getRank() {
        return rank;
    }

    public void setRank(int rank) {
        this.rank = rank;
    }
}

三、完成游戏内容

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Game {
    public static final String[] suits = {"♥", "♣", "♦", "♠"};

    public List<Poker> buyPokers() {
        List<Poker> pokers = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            for (int j = 1; j < 13; j++) {
                Poker poker = new Poker(suits[i], j);
                pokers.add(poker);
            }
        }
        return pokers;
    }
    public void shuffle(List<Poker> pokers){
        for (int i = pokers.size()-1; i > 0; i--) {
            Random random=new Random();
            int index=random.nextInt(i);
            swap(pokers,i,index);
        }
    }
    public void swap(List<Poker> pokers,int i,int index){
        Poker tmp=pokers.get(i);
        pokers.set(i,pokers.get(index));
        pokers.set(index,tmp);
    }
    public List<List<Poker>> game(List<Poker> pokers){
        List<List<Poker>> hand=new ArrayList<>();
        List<Poker> hand1=new ArrayList<>();
        List<Poker> hand2=new ArrayList<>();
        List<Poker> 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++) {
                Poker removePoker=pokers.remove(0);
                hand.get(j).add(removePoker);
            }
        }
        return hand;
    }
}

四、测试

import java.util.ArrayList;
import java.util.List;

public class Test {
    public static void main(String[] args) {
        Game game=new Game();
        List<Poker> pokers=game.buyPokers();
        System.out.println(pokers);
        //洗牌
        game.shuffle(pokers);
        System.out.println("洗牌");
        System.out.println(pokers);
        //揭牌
        List<List<Poker>> List=game.game(pokers);
        System.out.println("揭牌");
        for (int i = 0; i < List.size(); i++) {
            System.out.println(List.get(i));
        }
    }
}

最后结果

[{♥ 1}, {♥ 2}, {♥ 3}, {♥ 4}, {♥ 5}, {♥ 6}, {♥ 7}, {♥ 8}, {♥ 9}, {♥ 10}, {♥ 11}, {♥ 12}, {♣ 1}, {♣ 2}, {♣ 3}, {♣ 4}, {♣ 5}, {♣ 6}, {♣ 7}, {♣ 8}, {♣ 9}, {♣ 10}, {♣ 11}, {♣ 12}, {♦ 1}, {♦ 2}, {♦ 3}, {♦ 4}, {♦ 5}, {♦ 6}, {♦ 7}, {♦ 8}, {♦ 9}, {♦ 10}, {♦ 11}, {♦ 12}, {♠ 1}, {♠ 2}, {♠ 3}, {♠ 4}, {♠ 5}, {♠ 6}, {♠ 7}, {♠ 8}, {♠ 9}, {♠ 10}, {♠ 11}, {♠ 12}]
洗牌
[{♠ 7}, {♦ 8}, {♦ 3}, {♠ 9}, {♥ 1}, {♠ 1}, {♠ 2}, {♦ 12}, {♦ 10}, {♦ 2}, {♣ 6}, {♣ 1}, {♠ 5}, {♦ 7}, {♦ 6}, {♣ 8}, {♣ 2}, {♦ 5}, {♠ 6}, {♥ 9}, {♥ 6}, {♠ 3}, {♦ 4}, {♥ 8}, {♣ 7}, {♣ 5}, {♥ 5}, {♦ 11}, {♠ 12}, {♥ 2}, {♣ 10}, {♥ 10}, {♥ 4}, {♣ 9}, {♠ 4}, {♦ 9}, {♠ 10}, {♦ 1}, {♥ 12}, {♣ 12}, {♥ 11}, {♠ 8}, {♣ 3}, {♣ 11}, {♣ 4}, {♥ 3}, {♥ 7}, {♠ 11}]
揭牌
[{♠ 7}, {♠ 9}, {♠ 2}, {♦ 2}, {♠ 5}]
[{♦ 8}, {♥ 1}, {♦ 12}, {♣ 6}, {♦ 7}]
[{♦ 3}, {♠ 1}, {♦ 10}, {♣ 1}, {♦ 6}]

五、总结

通过这个纸牌游戏的实现,我们可以学习到Java中类与对象的设计与使用,以及集合类的使用。购买纸牌、洗牌和揭牌等步骤涉及到了对象的创建和属性的操作,通过List集合可以方便地存储和管理多个纸牌对象。同时,通过使用Random类的nextInt()方法来实现随机交换纸牌的位置,实现洗牌的效果。最后,通过将揭牌结果存储在一个包含多个List集合的集合中,可以方便地得到每个玩家手中的纸牌,便于后续游戏的进行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1004806.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Prometheus+Grafana可视化监控【MySQL状态】

文章目录 一、Prometheus监控MySQL二、Grafana添加MySQL监控模板 PrometheusGrafana部署请参考上篇文章: PrometheusGrafana部署: 一、Prometheus监控MySQL 1、创建MySQL监控用户 mysql> create user "prometheus""%" identified by NTQ34tg*19VF; m…

Java——比较器

引入的背景 我们知道基本数据类型的数据&#xff08;除boolean类型外&#xff09;需要比较大小的话&#xff0c;直接使用比较运算符即可&#xff0c;但是引用数据类型是不能直接使用比较运算符来比较大小的。那么&#xff0c;如何解决这个问题呢&#xff1f; 在Java中经常会涉…

[杂谈]-从硬件角度理解二进制数

从硬件角度理解二进制数 文章目录 从硬件角度理解二进制数1、概述2、模拟电路3、数字电路4、逻辑电平5、TTL 器件的电压水平6、总结 1、概述 二进制数以 2 为基数系统表示&#xff0c;该系统只有两 (2) 个不同的数值&#xff0c;即 0 和 1。就像最常见的那样&#xff0c;十进制…

C 风格文件输入/输出---无格式输入/输出---(std::fgetc,std::getc,std::fgets)

C 标准库的 C I/O 子集实现 C 风格流输入/输出操作。 <cstdio> 头文件提供通用文件支持并提供有窄和多字节字符输入/输出能力的函数&#xff0c;而 <cwchar>头文件提供有宽字符输入/输出能力的函数。 无格式输入/输出 从文件流获取字符 std::fgetc, std::getc …

Python引入模块——拿着别人的代码做自己的项目

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 本文专栏&#xff1a;Python专栏 专栏介绍&#xff1a;本专栏为免费专栏&#xff0c;并且会持续更新python基础知识&#xff0c;欢迎各位订阅关注。 目录 一、什么是Python模块 二、Python模块的作用 三、Py…

cmd 90 validate error!(达梦数据库日志报错)

达梦数据库报错 error-cmd 90 validate error! 环境介绍1 解决办法 环境介绍 某生产环境数据库启动后&#xff0c;dm_实例名_202309.log&#xff0c;偶尔报错cmd 90 validate error! 1 解决办法 接口用错了&#xff0c;消息非法&#xff0c;比如用 6 的 JDBC 连 7 或 7 的 …

C++QT 作业5

#include <iostream> #define PI 3 using namespace std; class Shape { protected:int zc;int mj; public:Shape(){}Shape(int z,int m):zc(z),mj(z){}~Shape(){}Shape(const Shape &other):zc(other.zc),mj(other.mj){cout<<"拷贝构造函数"<<…

【买入看涨期权策略(Long Call)】

买入看涨期权策略的收益主要来源于标的资产价格的上涨&#xff0c;是一种基础的期权策略&#xff0c;该策略最大的吸引力在于能给投资者提供很大程度的杠杆&#xff0c;投资者能够在标的资产价格上涨幅度较小的时候获得较大的盈利&#xff0c;并且其对应的风险值不会超过一个固…

骨传导耳机对大脑有影响吗?骨传导耳机到底好不好

先上结论&#xff0c;骨传导耳机对大脑没有影响。骨传导耳机使用的是骨传导技术&#xff0c;声音是通过头骨骨头和颌骨给内耳传递的&#xff0c;而不是通过传统的空气传播&#xff0c;它将声音传输到颅骨&#xff0c;然后透过骨头振动直接刺激内耳&#xff0c;绕过外耳和中耳。…

LINUX 网络管理

目录 一、NetworkManager的特点 二、配置网络 1、使用ip命令临时配置 1&#xff09;查看网卡在网络层的配置信息 2&#xff09;查看网卡在数据链路层的配置信息 3&#xff09;添加或者删除临时的网卡 4&#xff09;禁用和启动指定网卡 2、修改配置文件 3、nmcli命令行…

小程序中如何给会员一键拨号

一键拨号功能是一个非常实用的功能&#xff0c;商家可以快速与会员取得联系。下面&#xff0c;我们将介绍如何在小程序中实现一键拨号功能。 1. 会员绑定手机号。会员在个人中心点击设置按钮&#xff0c;在手机号码处&#xff0c;点击一键输入手机号。也可以在提交订单页面&am…

多寄存器内存访问指令的寻址方式

多寄存器内存访问 注意使用的是大括号 将R1-R4寄存器中的数据存储到内存以R11为起始地址的内存中 LDM同样适用 当寄存器不连续时&#xff0c;使用逗号分隔 例 STM R11,{R1,R2,R4} 不管寄存器列表中寄存器的顺序如何&#xff0c;存到内存中永远都是小编号的寄存…

Coovally模型探索:一键下载Hugging Face预训练模型并集成应用

Coovally是一个包含完整AI建模流程、AI项目管理及AI系统部署管理的机器学习平台&#xff0c;可提供数据预处理、智能标注、分布式模型训练、多维度模型评估、一键式模型部署服务。 Coovally支持图像、文本、表格、时间序列等不同类型数据的深度学习和应用&#xff0c;快速实现…

MinIO是什么?如何使用

哈喽&#xff01;大家好&#xff0c;我是旷世奇才李先生 文章持续更新&#xff0c;可以微信搜索【小奇JAVA面试】第一时间阅读&#xff0c;回复【资料】更有我为大家准备的福利哟&#xff0c;回复【项目】获取我为大家准备的项目 文章目录 一、MinIO介绍1、简介2、优缺点 二、M…

类和对象(1)

文章目录 1.面向过程和面向对象初步认识2.类的引入3.类的定义4.类的访问限定符和封装4.1访问限定符4.2封装 5.类的作用域6.类的实例化6.2结构体内存对齐规则 7.this指针7.2this指针的特性 封装&#xff08;补充&#xff09; 1.面向过程和面向对象初步认识 C面向对象但不纯面向…

推荐几款实用的Google浏览器插件

推荐几款实用的Google浏览器插件 1. 阅读翻译插件1.1 Google 翻译1.2 DeepL翻译&#xff08;适合大段落&#xff09; 2. 视频字幕翻译插件2.1 YouTube™ 双字幕2.2 Dualsub——实现双字幕 3. 评论翻译插件3.1 油管评论翻译机 4. Infinity 新标签页 (Pro)5. 附加其他5.1 Octotre…

JDK20 + SpringBoot 3.1.0 + JdbcTemplate 使用

JDK20 SpringBoot 3.1.0 JdbcTemplate 使用 一.测试数据库 Postgres二.SpringBoot项目1.Pom 依赖2.配置文件3.启动类4.数据源配置类5.实体对象类包装类6.测试用实体对象1.基类2.扩展类 7.测试类 通过 JdbcTemplate 直接执行 SQL 语句&#xff0c;结合源码动态编译即可方便实现…

复现SCI文章系列教程 | 文章复现一(IF 7.3):文章讨论与文章分析套路讲解

一、本期复现文章 本系列教程从今天开始&#xff0c;前面想做&#xff0c;但是又没时间。作为佛系博主的我来说&#xff0c;这个系列教程算是一个长久的计划。会涉及医学和植物两大类。本系列教程详细情况可以看《复现SCI文章系列教程》. 我们第一篇复现的文章寻找的是的来自…

Spring MVC:请求转发与请求重定向

Spring MVC 请求转发请求重定向附 请求转发 转发&#xff08; forward &#xff09;&#xff0c;指服务器接收请求后&#xff0c;从一个资源跳转到另一个资源中。请求转发是一次请求&#xff0c;不会改变浏览器的请求地址。 简单示例&#xff1a; 1.通过 String 类型的返回值…

开学季买哪个牌子的电容笔好?ipad触控笔推荐平价

我想很多学生们在新学期开始之前就开始买iPad了&#xff0c;如今&#xff0c;作为iPad主要配件之一的电容笔&#xff0c;功能越来越强&#xff0c;使用的人也越来越多。所以&#xff0c;怎样选择一支质量好&#xff0c;价格便宜的电容笔就成了人们最为关注的问题。所以&#xf…