ArrayList应用

1.简单的洗牌算法

基本要求:

  1. 人数为3个人
  2. 没人轮流抽一张牌,抽五轮,也就是每人五张牌
  3. 去除大小王,一共52张牌,要求牌打乱顺序

思路:

  1. 创建Card对象,有花色和牌面值两个成员属性
  2. 生成一副扑克牌,四个花色分别生成1-13的牌面值
  3. 生成随机数,将最后一张牌与前面随机一张牌进行交换以此来完成洗牌操作
  4. 发到三个人的手里,每发一张牌就删除一个元素,删除的该元素记录到不同人的手里 

(1)定义每张扑克牌的属性

这里我们只需要创建一个对象Card,并定义出牌面值和花色两个成员属性;

写出该对象的构造方法和toString方法即可;

package demo1;public class Card {public int rank;//牌面值public String suit;//花色public Card(int rank, String suit) {this.rank = rank;this.suit = suit;}@Overridepublic String toString() {return suit + rank;}
}

(2)生成一副扑克牌(不包含大小王)

  1. 先定义一个数组表示有四种花色;
  2. 如何生成一副牌?首先要明确是一个花色生成1-13牌面值的牌,所以此时要用到循环, 外循环循环4次也就是四个花色,内循环循环13次也就是牌的面值,一张花色生成完13张后再进行下一张,牌数的大小也就是不断变化的j值,花色也就是最初定义的suits,用不断变化的i来表示四个花色;然后我们通过实例化具有花色和牌面值两个属性的对象,这样就生成了四种不同花色不同牌面值的52张牌
  3. 生成的牌放在哪里?我们创建一个顺序表,其中列表中的元素都是Card类型或其子类型。创建好一张牌我们就追加到列表当中
    public static final String[] suits = {"♥","♠","♣","♦"};public List<Card> buyCard() {List<Card> cardList = new ArrayList<>();for (int i = 0; i < 4; i++) {for (int j = 0; j < 13; j++) {int rank = j;//牌数大小String suit = suits[i];Card card = new Card(rank,suit);cardList.add(card);//生成了一张牌追加到顺序表中}}return cardList;}

(3)洗牌

如何洗牌?顺序表的底层是一个数组,我们只需要将数组中最后一个数字与前面随机位置的数字进行交换即可;所以生成0~总牌数-1大小的随机数,直到只剩一个元素时,停止循环。

注:虽然顺序表的底层是一个数组,但在进行元素交换时不能直接使用[下标]的方式来进行交换,需要通过get方法获取,set方法更新来实现交换操作。

//洗牌操作//把牌传过来public void shuffle(List<Card> cardList) {Random random = new Random();for (int i = cardList.size()-1;i>0; i--) {int randIndex= random.nextInt(i);//生成0~i的随机数放入randIndexswap(cardList,i,randIndex);}}private void swap(List<Card> cardList,int i,int j) {Card tmp = cardList.get(i);cardList.set(i,cardList.get(i));cardList.set(j,tmp);}

(4)发牌

每个人抓的牌放到哪里?创建一个顺序表,每次抓到的牌add到对应人的手中

三个人怎么轮流抓取五张牌?通过双层for循环来实现,第一轮每人抓一张牌,进行五轮

怎么抓牌?通过remove来删除0下标的牌

抓的牌放到谁的手中?抓牌后添加到对应的人的手中,i就表示第几个人

此时相当于创建了一个二维数组,每个元素类型为List<Card>,表中存储对应的五张牌

//三个人, 每个人轮流抓5张牌public void drawCard(List<Card> cardList){List<Card> hand1=new ArrayList<>();List<Card> hand2=new ArrayList<>();List<Card> hand3=new ArrayList<>();List<List<Card>>hands=new ArrayList<>();hands.add(hand1);hands.add(hand2);hands.add(hand3);for (int i = 0; i < 5; i++) {//i代表5张牌for (int j = 0; j < 3; j++) {//j代表3个人Card card=cardList.remove(0);    //怎么抓牌? 每次删除0下标的牌hands.get(j).add(card);//hands.get(0)=hand1,以此类推}}System.out.println("第1个人的牌:"+hand1);System.out.println("第2个人的牌:"+hand2);System.out.println("第3个人的牌:"+hand3);}

 (5)整体代码

package demo1;import java.util.List;public class Test {public static void main(String[] args) {Cards cards=new Cards();List<Card> cardList=cards.buyCard();System.out.println("生成一副扑克牌:");System.out.println(cardList);cards.shuffle(cardList);System.out.println("洗牌后:");System.out.println(cardList);System.out.println("抓牌:");cards.drawCard(cardList);System.out.println("剩下的牌:");System.out.println(cardList);}
}

(6)测试

package demo1;import java.util.List;public class Test {public static void main(String[] args) {Cards cards=new Cards();List<Card> cardList=cards.buyCard();System.out.println("生成一副扑克牌:");System.out.println(cardList);cards.shuffle(cardList);System.out.println("洗牌后:");System.out.println(cardList);System.out.println("抓牌:");cards.drawCard(cardList);System.out.println("剩下的牌:");System.out.println(cardList);}
}

2.杨辉三角

思路:

List<List<Integer>>表示创建了一个顺序表,顺序表中的每一个元素都是存储整形的顺序表

当i==j时的位置上都是1,直接添加到顺序表即可,其他位置上的值:例如[2][1]的3==[1][2]的2+[1][1]1,这样就生成了一组数据,每生成一组就追加到顺序表中

class Solution {//numRows表示行public List<List<Integer>> generate(int numRows) {List<List<Integer>> list = new ArrayList<List<Integer>>();List<Integer> list1 = new ArrayList<>();list1.add(1);list.add(list1);for (int i = 1; i < numRows; i++) {List<Integer> cur = new ArrayList<>();cur.add(1);List<Integer> pre = list.get(i-1);for (int j = 1; j < i; j++) {cur.add(pre.get(j) + pre.get(j-1));}cur.add(1);list.add(cur);}return list;}
}
class Solution {//numRows表示行public List<List<Integer>> generate(int numRows) {List<List<Integer>> list = new ArrayList<List<Integer>>();for (int i = 0; i < numRows; i++) {List<Integer> list1 = new ArrayList<>();for (int j = 0; j <= i; j++) {if (j == 0 || i == j) {list1.add(1);} else {list1.add(list.get(i-1).get(j-1) + list.get(i-1).get(j));}}list.add(list1);}return list;}
}

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

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

相关文章

ICode国际青少年编程竞赛- Python-1级训练场-for循环练习

ICode国际青少年编程竞赛- Python-1级训练场-for循环练习 1、 for i in range(3):Dev.step(4)Dev.turnLeft()2、 for i in range(3):Dev.step(2)Dev.turnRight()Dev.step(2)Dev.turnLeft()3、 for i in range(3):Dev.step(2)Dev.turnRight()Dev.step(2)Dev.turnLeft()4、 for…

痉挛性斜颈患者早上运动还是下午运动更合适?选对了让治疗更简单!【北京仁爱堂】

对于痉挛性斜颈患者来说&#xff0c;选择合适的运动时间对于治疗的效果和舒适度至关重要。那么&#xff0c;痉挛性斜颈患者早上运动还是下午运动更合适呢&#xff1f;本文将从多个角度对此进行分析&#xff0c;帮助患者找到最适合自己的运动时间。 首先&#xff0c;我们需要了…

网络安全的重要性及人才需求

安全现在是大趋势&#xff0c;说是铁饭碗也不为过&#xff0c;就业前景好&#xff0c;方向多比传统计算机行业就业舒服点。但是大厂依然是985&#xff0c;211的天下&#xff0c;是双非能进大厂的&#xff0c;只是凤毛麟角。前提是你的能力可以让公司忽略你的学历。 以2023年为…

HTML_CSS学习:常用文本属性

一、文本颜色 相关代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>文本颜色</title><style>div{font-size: 90px;}.atguigu1{color: #238c20;}.atguigu2{color: rgb(2…

文心一言 VS 讯飞星火 VS chatgpt (250)-- 算法导论18.2 3题

三、请说明如何在一棵 B 树中找出最小关键字&#xff0c;以及如何找出某一给定关键字的前驱。如果要写代码&#xff0c;请用go语言。 文心一言&#xff1a; 在B树&#xff08;也称为B-tree&#xff09;中&#xff0c;最小的关键字总是位于最左边的叶子节点的最左边的元素。要…

中国科学院南京地理与湖泊研究所张科研究员团队联合多家单位科学家在PNAS发文:湖泊沉积物解锁长三角太湖流域可持续发展之道

文章简介 论文名称&#xff1a;Transient social–ecological dynamics reveal signals of decoupling in a highly disturbed Anthro-pocene landscape&#xff08;瞬态社会生态动力学揭示了高度干扰的人类景观中解耦的信号&#xff09; 第一作者及通讯作者&#xff1a;林琪…

波形发生器设计(频率、占空比、幅值可调)

一、正弦波信号发生器 1.电路原理图&#xff1a; 2.原理&#xff1a; 采用了文氏电桥的方法&#xff0c;通过自激振荡的方式出波。 其中R6,C1,R2,C2构成正反馈支路&#xff0c;令R1R2R,C1C2C&#xff0c;可以计算出正弦波的振荡频率f1/2πRC。将文氏电路的电容值固定&#xff0…

《21天学通C++》(第十五章)标准模板库简介

本章简单介绍STL容器、迭代器和算法的基本概念&#xff0c;之后几章会分别详述 1.STL容器 STL容器是STL中用于存储集合数据的组件&#xff0c;它们可以被看作是模板类&#xff0c;允许开发者定义特定类型的容器发&#xff0c;这里按照C11标准分为四类&#xff1a;顺序容器、关…

信息系统项目管理师0082:项目基础(6项目管理概论—6.2项目基本要素—6.2.1项目基础)

点击查看专栏目录 文章目录 6.2项目基本要素6.2.1项目基础1.独特的产品、服务或成果2.临时性工作3.项目驱动变更4.项目创造业务价值5.项目启动背景记忆要点总结6.2项目基本要素 6.2.1项目基础 项目是为创造独特的产品、服务或成果

XYCTF2024 RE ez unity 复现

dll依然有加壳 但是这次global-metadata.dat也加密了&#xff0c;原工具没办法用了&#xff0c;不过依然是可以修复的 a. 法一&#xff1a;frida-il2cpp-bridge 可以用frida-il2cpp-bridge GitHub - vfsfitvnm/frida-il2cpp-bridge: A Frida module to dump, trace or hijac…

STM32入门_江协科技_3~4_OB记录的自学笔记_软件安装新建工程

3. 软件安装 3.1. 安装Keil5 MDK 作者的资料下载的连接如下&#xff1a;https://jiangxiekeji.com/download.html#32 3.2. 安装器件支持包 因为新的芯片层出不穷&#xff0c;所以需要安装Keil5提供的器件升级版对软件进行升级&#xff0c;从而支持新的芯片&#xff1b;如果不…

JSP语法——[JSP]7

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;大大会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

SVM单类异常值检测

SVM是一种广泛使用的分类器&#xff0c;通常用于二分类或多分类问题。然而&#xff0c;在异常点检测的场景中&#xff0c;我们通常会将数据视为一个类别&#xff08;即正常数据点&#xff09;&#xff0c;并尝试找到那些与正常数据点显著不同的点&#xff08;即异常点&#xff…

基础IO认识

回顾文件 我们之前认识文件只是在语言程度上理解&#xff0c;但是我们理解的不够彻底&#xff0c;要想真正理解文件要在os上理解。 简单代码认识 1 #include<stdio.h>2 int main(){3 FILE* fpfopen("log.txt","w");4 if(fpNULL){5 p…

PG实例连接访问控制

实例访问控制可以控制来自于不同主机&#xff0c;不同用户是否允许访问指定的数据库&#xff0c;以及验证方式。 与oracle中的连接管理器的功能相同&#xff0c;之前有写过一篇oracleCMAN连接管理器的配置实操&#xff1a; 配置oracle连接管理器&#xff08;cman&#xff09;…

CAN标准帧和扩展帧

1、CAN总线有两个ISO国际标准&#xff1a; ISO11519和ISO11898。 1)、ISO11519定义低速CAN通信标准&#xff1a;通信速率为10&#xff5e;125Kbps&#xff0c;属于开环总线&#xff1b; 传输速率为40Kbps时&#xff0c;总线长度可达1000米&#xff1b; 低速CAN是一个“开环网络…

Linux 麒麟系统安装

国产麒麟系统官网地址&#xff1a; https://www.openkylin.top/downloads/ 下载该镜像后&#xff0c;使用VMware部署一个虚拟机&#xff1a; 完成虚拟机创建。点击&#xff1a;“开启此虚拟机” 选择“试用试用开放麒麟而不安装&#xff08;T&#xff09;”&#xff0c;进入op…

同步互斥问题模型

目录 一. 生产者-消费者问题二. 多生产者-多消费者问题三. 吸烟者问题四. 读者-写者问题五. 哲学家进餐问题 \quad 一. 生产者-消费者问题 \quad 问题分析 \quad 如何实现 \quad \quad V操作不会导致进程阻塞&#xff0c;因此两个v操作顺序可以交换。 \quad 二. 多生产者-多消费…

[答疑]Eric Evans这样画是真不懂还是有特别考虑

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 albert 2024-5-2 10:14 您觉得Evans这样画是真不懂还是有特别的考虑&#xff1f; &#xff08;补注&#xff1a;指的是“《领域驱动设计》里的这个不变式是不是也是错的”中提到的图…

重看Spring聚焦BeanDefinition分析和构造

目录 一、对BeanDefinition的理解 &#xff08;一&#xff09;理解元信息 &#xff08;二&#xff09;BeanDefinition理解分析 二、BeanDefinition的结构设计分析 &#xff08;一&#xff09;整体结构体会 &#xff08;二&#xff09;重要接口和类分析 三、构造 BeanDef…