当前位置: 首页 > news >正文

集合嵌套,Collections,斗地主案例,日志框架

文章目录

  • 集合嵌套
    • List嵌套List
    • List嵌套Map
    • Map嵌套Map
  • Collections类
    • 方法
      • 排序 sort
    • 乱序 shuffle
  • 斗地主案例
    • 需求
    • 思路
    • 代码
  • 日志框架
    • 介绍
    • 优势
    • 体系结构
    • Logback
      • 概述
      • 快速入门
      • 配置详解

集合嵌套

List嵌套List

public static void main(String[] args){//一个年级有许多班级,每个班级有许多学生,学生有姓名//定义班级List<String> classes1List = new ArrayList<>();classes1List.add("zhangsan");classes1List.add("lisi");classes1List.add("wangwu");List<String> classes2List = new ArrayList<>();classes2List.add("zhangsan2");classes2List.add("lisi2");classes2List.add("wangwu2");List<String> classes3List = new ArrayList<>();classes3List.add("zhangsan3");classes3List.add("lisi3");classes3List.add("wangwu3");//定义年级List<List<String>> gradeList = new ArrayList<>();gradeList.add(classes1List);gradeList.add(classes2List);gradeList.add(classes3List);//遍历gradeListfor (List<String> classes : gradeList) {for (int i = 0; i < classes.size(); i++) {System.out.println(classes.get(i));}System.out.println("--------------------");}}

List嵌套Map

public static void main(String[] args) {//先定义班级Map<String,String> classes1Map = new HashMap<>();classes1Map.put("001","zhangsan");classes1Map.put("002","lisi");classes1Map.put("003","wangwu");Map<String,String> classes2Map = new HashMap<>();classes2Map.put("001","zhangsan2");classes2Map.put("002","lisi2");classes2Map.put("003","wangwu2");Map<String,String> classes3Map = new HashMap<>();classes3Map.put("001","zhangsan3");classes3Map.put("002","lisi3");classes3Map.put("003","wangwu3");//定义年级List<Map<String,String>> gradeList = new ArrayList<>();gradeList.add(classes1Map);gradeList.add(classes2Map);gradeList.add(classes3Map);//遍历for (Map<String, String> classes : gradeList) {for (Map.Entry<String, String> entry : classes.entrySet()) {String id = entry.getKey();String name = entry.getValue();System.out.println(id + "--" + name);}System.out.println("------------------");}
}

Map嵌套Map

 public static void main(String[] args) {//先定义班级Map<String,String> classes1Map = new HashMap<>();classes1Map.put("001","zhangsan");classes1Map.put("002","lisi");classes1Map.put("003","wangwu");Map<String,String> classes2Map = new HashMap<>();classes2Map.put("001","zhangsan2");classes2Map.put("002","lisi2");classes2Map.put("003","wangwu2");Map<String,String> classes3Map = new HashMap<>();classes3Map.put("001","zhangsan3");classes3Map.put("002","lisi3");classes3Map.put("003","wangwu3");//再定义年级Map<String,Map<String,String>> gradeMap = new HashMap<>();gradeMap.put("第一个班级",classes1Map);gradeMap.put("第二个班级",classes2Map);gradeMap.put("第三个班级",classes3Map);//遍历for (String s : gradeMap.keySet()) {System.out.println("--------------");for (Map.Entry<String, String> entry : gradeMap.get(s).entrySet()) {String id = entry.getKey();String name = entry.getValue();System.out.println(s + ":" + id + "--" + name);}}}

Collections类

方法

排序 sort

Snipaste_2024-03-30_14-53-30.png

乱序 shuffle

Snipaste_2024-03-30_14-54-09.png

斗地主案例

需求

Snipaste_2024-03-30_15-47-41.png

思路

  1. 准备牌
    1. 完成数字和纸牌的映射,使用Map集合
    2. 利用list集合记录牌的编号
  2. 洗牌:利用Collections.shuffle方法对其洗牌
  3. 发牌:将牌的编号对3取余,剩下3张作为底牌
    1. 利用TreeSet集合保存三个人的拍编号
  4. 看牌,通过TreeSet集合中牌的编号利用Map集合查看牌

代码

public static void main(String[] args) {//准备牌Map<Integer, String> pokerMap = new HashMap<>();List<Integer> pokerNum = new ArrayList<>();preparePoker(pokerMap, pokerNum);//洗牌Collections.shuffle(pokerNum);//System.out.println(pokerNum);//发牌TreeSet<Integer> player1 = takePoker(pokerNum,1);TreeSet<Integer> player2 = takePoker(pokerNum,2);TreeSet<Integer> player3 = takePoker(pokerNum,3);TreeSet<Integer> dp = takePoker(pokerNum,0);//        System.out.println(player1);
//        System.out.println(player2);
//        System.out.println(player3);
//        System.out.println(dp);//看牌lookPoker("zhangsan", player1, pokerMap);lookPoker("lisi", player2, pokerMap);lookPoker("wangwu", player3, pokerMap);lookPoker("底牌", dp, pokerMap);}//准备牌public static void preparePoker(Map<Integer, String> pokerMap, List<Integer> pokerNum) {String[] colors = {"♠", "♥", "♣", "♦"};String[] numbers = {"2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3"};int index = 0;pokerMap.put(index, "大王");pokerNum.add(index);index++;pokerMap.put(index, "小王");pokerNum.add(index);index++;for (int i = 0; i < numbers.length; i++) {for (int j = 0; j < colors.length; j++) {pokerMap.put(index, colors[j] + numbers[i]);pokerNum.add(index);index++;}}//System.out.println(pokerMap);}//发牌public static TreeSet<Integer> takePoker(List<Integer> pokerNum,Integer id) {TreeSet<Integer> player1 = new TreeSet<>();TreeSet<Integer> player2 = new TreeSet<>();TreeSet<Integer> player3 = new TreeSet<>();TreeSet<Integer> dp = new TreeSet<>();//底牌for (int i = 0; i < pokerNum.size(); i++) {if (i > pokerNum.size() - 4) {dp.add(pokerNum.get(i));} else if (i % 3 == 0) {player1.add(pokerNum.get(i));} else if (i % 3 == 1) {player2.add(pokerNum.get(i));} else if (i % 3 == 2) {player3.add(pokerNum.get(i));}}if (id == 0){return dp;} else if (id == 1) {return player1;}else if (id == 2){return player2;} else if (id == 3) {return player3;}return new TreeSet<>();}//看牌public static void lookPoker(String name, TreeSet<Integer> player, Map<Integer, String> pokerMap) {System.out.println(name + "的牌是:");for (Integer pokerNum : player) {String poker = pokerMap.get(pokerNum);System.out.print(poker + " ");}System.out.println();}

日志框架

介绍

程序中的日志可以用来记录程序中运行过程中的信息,并可以进行永久存储

优势

  • 可以将系统执行的信息选择性的记录到指定的位置(控制台,文件,数据库中)
  • 可以随时以开关的形式控制是否记录日志,无需修改源代码

体系结构

Snipaste_2024-03-30_17-56-26.png

Logback

概述

Snipaste_2024-03-30_17-58-06.png

快速入门

Snipaste_2024-03-30_17-59-39.png

配置详解

Snipaste_2024-03-30_18-12-26.png
Snipaste_2024-03-30_18-13-08.png

相关文章:

集合嵌套,Collections,斗地主案例,日志框架

文章目录 集合嵌套List嵌套ListList嵌套MapMap嵌套Map Collections类方法排序 sort 乱序 shuffle 斗地主案例需求思路代码 日志框架介绍优势体系结构Logback概述快速入门配置详解 集合嵌套 List嵌套List public static void main(String[] args){//一个年级有许多班级&#xf…...

maven pom relativePath属性的作用

maven pom relativePath属性的作用 文章目录 maven pom relativePath属性的作用一、relativePath出现的地方二、relativePath默认值三、四、<relativePath>一个pom路径 一、relativePath出现的地方 搭建maven项目&#xff0c;子模块指定父模块试&#xff0c;经常会在par…...

【STM32 HAL库SPI/QSPI协议学习,基于外部Flash读取。】

1、SPI协议 简介 SPI 协议是由摩托罗拉公司提出的通讯协议 (Serial Peripheral Interface)&#xff0c;即串行外围设备接口&#xff0c;是 一种高速全双工的通信总线。它被广泛地使用在 ADC、LCD 等设备与 MCU 间&#xff0c;要求通讯速率 较高的场合。 SPI 物理层 SPI 通讯…...

Nginx入门--初识Nginx的架构

一、概述 Nginx的架构设计旨在高效处理并发的网络请求。它采用了事件驱动的、非阻塞的IO模型&#xff0c;可以同时处理成千上万个并发连接&#xff0c;而不会消耗太多的系统资源。 二、主要组件 Nginx的主要组件包括&#xff1a; Master Process&#xff08;主进程&#xf…...

网络性能提升10%,ZStack Edge 云原生超融合基于第四代英特尔®至强®可扩展处理器解决方案发布

随着业务模式的逐渐转变、业务架构逐渐变得复杂&#xff0c;同时容器技术的兴起和逐渐成熟&#xff0c;使得Kubernetes、微服务等新潮技术逐步应用于业务应用系统上。 为了充分释放性能、为业务系统提供更高效的运行环境&#xff0c;ZStack Edge 云原生超融合采用了第四代英特尔…...

双非计算机考研目标211,选11408还是22408更稳?

求稳得话&#xff0c;11408比22408要稳&#xff01; 很多同学只知道&#xff0c;11408和22408在考察的科目上有区别&#xff0c;比如&#xff1a; 11408考的是考研数学一和英语一&#xff0c;22408考察的是考研数学二和英语二&#xff1a; 考研数学一和考研数学二的区别大吗…...

简单了解策略模式

什么是策略模式&#xff1f; 策略模式提供生成某一种产品的不同方式 Strategy策略类定义了某个各种算法的公共方法&#xff0c;不同的算法类通过继承Strategy策略类&#xff0c;实现自己的算法 Context的作用是减少客户端和Strategy策略类之间的耦合&#xff0c;客户端只需要…...

算法——运动模型

智能驾驶中常用的速度计算算法包括基于GPS的速度计算、惯性测量单元&#xff08;IMU&#xff09;的速度计算、雷达测距的速度计算、视觉测距的速度计算等。这些算法可以单独使用或者结合使用&#xff0c;以提高速度计算的准确性和稳定性。 智能驾驶中常用的加速度计算算法包括…...

基于R语言lavaan结构方程模型(SEM)技术应用

结构方程模型&#xff08;Sructural Equation Modeling&#xff0c;SEM&#xff09;是分析系统内变量间的相互关系的利器&#xff0c;可通过图形化方式清晰展示系统中多变量因果关系网&#xff0c;具有强大的数据分析功能和广泛的适用性&#xff0c;是近年来生态、进化、环境、…...

本地虚拟机服务器修改站点根目录并使用域名访问的简单示例

说明&#xff1a;本文提及效果是使用vmware虚拟机&#xff0c;镜像文件是Rocky8.6 一、配置文件路径 1. /etc/httpd/conf/httpd.conf #主配置文件 2. /etc/httpd/conf.d/*.conf #调用配置文件 调用配置文件的使用&#xff1a; vim /etc/httpd/conf.d/webpage.conf 因为在主配…...

生信数据分析——GO+KEGG富集分析

生信数据分析——GOKEGG富集分析 目录 生信数据分析——GOKEGG富集分析1. 富集分析基础知识2. GO富集分析&#xff08;Rstudio&#xff09;3. KEGG富集分析&#xff08;Rstudio&#xff09; 1. 富集分析基础知识 1.1 为什么要做功能富集分析&#xff1f; 转录组学数据得到的基…...

微服务(基础篇-007-RabbitMQ)

目录 初识MQ(1) 同步通讯&#xff08;1.1&#xff09; 异步通讯&#xff08;1.2&#xff09; MQ常见框架&#xff08;1.3&#xff09; RabbitMQ快速入门(2) RabbitMQ概述和安装&#xff08;2.1&#xff09; 常见消息模型&#xff08;2.2&#xff09; 快速入门&#xff…...

汇总:五个开源的Three.js项目

Three.js 是一个基于 WebGL 的 JavaScript 库&#xff0c;它提供了一套易于使用的 API 用来在浏览器中创建和显示 3D 图形。通过抽象和简化 WebGL 的复杂性&#xff0c;Three.js 使开发者无需深入了解 WebGL 的详细技术就能够轻松构建和渲染3D场景、模型、动画、粒子系统等。 T…...

JavaScript(一)---【js的两种导入方式、全局作用域、函数作用域、块作用域】

一.JavaScript介绍 1.1什么是JavaScript JavaScript简称“js”&#xff0c;js与java没有任何关系。 js是一种“轻量级、解释型、面向对象的脚本语言”。 二.JavaScript的两种导入方式 2.1内联式 在HTML文档中使用<script>标签直接引用。 <script>console.log…...

部署云原生边缘计算平台kubeedge

文章目录 1、kubeedge架构2、基础服务提供 负载均衡器 metallb2.1、开启ipvc模式中的strictARP2.2、部署metalb2.2.1、创建IP地址池2.2.2、开启二层转发&#xff0c;实现在k8s集群节点外访问2.2.3、测试 3、部署cloudcore3.1、部署cloudcore3.2、修改cloudcore的网络类型 4、部…...

Java设计模式:单例模式详解

设计模式&#xff1a;单例详解 文章目录 设计模式&#xff1a;单例详解一、单例模式的原理二、单例模式的实现推荐1、饿汉模式2、静态内部类 三、单例模式的案例四、单例模式的使用场景推荐总结 一、单例模式的原理 单例模式听起来很高大上&#xff0c;但其实它的核心思想很简…...

Qt5.14.2 定时器黑魔法,一键唤醒延时任务

在图形界面程序的世界里&#xff0c;有这么一个需求无处不在:在特定的时间间隔后&#xff0c;执行一段特殊的代码。比如说30秒后自动保存文档、500毫秒后更新UI界面等等。作为资深Qt程序员&#xff0c;我相信各位一定也曾为实现这种"延时任务"而绞尽脑汁。今天&#…...

C++项目——集群聊天服务器项目(九)客户端异常退出业务

服务器端应检测到客户端是否异常退出&#xff0c;因此本节来实现客户端异常退出&#xff0c;项目流程见后文 一、客户端异常退出业务流程 &#xff08;1&#xff09;在业务模块定义处理客户端异常退出的函数 &#xff08;2&#xff09;集群聊天服务器项目(八&#xff09;提到…...

STM32CubeIDE基础学习-HC05蓝牙模块和手机通信

STM32CubeIDE基础学习-HC05蓝牙模块和手机通信 文章目录 STM32CubeIDE基础学习-HC05蓝牙模块和手机通信前言第1章 硬件连接第2章 工程配置第3章 代码编写3.1 手机指令控制LED 第4章 实验现象总结 前言 前面的文章学习了串口通过轮询和中断的简单使用方法&#xff0c;现在就来用…...

npm mongoose包下载冲突解决之道

我在新电脑下载完项目代码后,运行 npm install --registryhttps://registry.npm.taobao.org 1运行就报错&#xff1a; npm ERR! code ERESOLVE npm ERR! ERESOLVE unable to resolve dependency tree npm ERR! npm ERR! While resolving: lowcode-form-backend1.0.0 npm …...

【kafka】Golang实现分布式Masscan任务调度系统

要求&#xff1a; 输出两个程序&#xff0c;一个命令行程序&#xff08;命令行参数用flag&#xff09;和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽&#xff0c;然后将消息推送到kafka里面。 服务端程序&#xff1a; 从kafka消费者接收…...

FFmpeg 低延迟同屏方案

引言 在实时互动需求激增的当下&#xff0c;无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作&#xff0c;还是游戏直播的画面实时传输&#xff0c;低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架&#xff0c;凭借其灵活的编解码、数据…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

什么是Ansible Jinja2

理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具&#xff0c;可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板&#xff0c;允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板&#xff0c;并通…...

vulnyx Blogger writeup

信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面&#xff0c;gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress&#xff0c;说明目标所使用的cms是wordpress&#xff0c;访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

libfmt: 现代C++的格式化工具库介绍与酷炫功能

libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库&#xff0c;提供了高效、安全的文本格式化功能&#xff0c;是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全&#xff1a…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)

第一篇&#xff1a;Liunx环境下搭建PaddlePaddle 3.0基础环境&#xff08;Liunx Centos8.5安装Python3.10pip3.10&#xff09; 一&#xff1a;前言二&#xff1a;安装编译依赖二&#xff1a;安装Python3.10三&#xff1a;安装PIP3.10四&#xff1a;安装Paddlepaddle基础框架4.1…...

智能职业发展系统:AI驱动的职业规划平台技术解析

智能职业发展系统&#xff1a;AI驱动的职业规划平台技术解析 引言&#xff1a;数字时代的职业革命 在当今瞬息万变的就业市场中&#xff0c;传统的职业规划方法已无法满足个人和企业的需求。据统计&#xff0c;全球每年有超过2亿人面临职业转型困境&#xff0c;而企业也因此遭…...

JDK 17 序列化是怎么回事

如何序列化&#xff1f;其实很简单&#xff0c;就是根据每个类型&#xff0c;用工厂类调用。逐个完成。 没什么漂亮的代码&#xff0c;只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...