当前位置: 首页 > 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 …...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

PHP和Node.js哪个更爽?

先说结论&#xff0c;rust完胜。 php&#xff1a;laravel&#xff0c;swoole&#xff0c;webman&#xff0c;最开始在苏宁的时候写了几年php&#xff0c;当时觉得php真的是世界上最好的语言&#xff0c;因为当初活在舒适圈里&#xff0c;不愿意跳出来&#xff0c;就好比当初活在…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成

一个面向 Java 开发者的 Sring-Ai 示例工程项目&#xff0c;该项目是一个 Spring AI 快速入门的样例工程项目&#xff0c;旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计&#xff0c;每个模块都专注于特定的功能领域&#xff0c;便于学习和…...

stm32wle5 lpuart DMA数据不接收

配置波特率9600时&#xff0c;需要使用外部低速晶振...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...

[USACO23FEB] Bakery S

题目描述 Bessie 开了一家面包店! 在她的面包店里&#xff0c;Bessie 有一个烤箱&#xff0c;可以在 t C t_C tC​ 的时间内生产一块饼干或在 t M t_M tM​ 单位时间内生产一块松糕。 ( 1 ≤ t C , t M ≤ 10 9 ) (1 \le t_C,t_M \le 10^9) (1≤tC​,tM​≤109)。由于空间…...

aardio 自动识别验证码输入

技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”&#xff0c;于是尝试整合图像识别与网页自动化技术&#xff0c;完成了这套模拟登录流程。核心思路是&#xff1a;截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...