ArrayList应用

news/2024/10/9 15:22:17/

1.简单的洗牌算法

基本要求:

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

思路:

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

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

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

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

java">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类型或其子类型。创建好一张牌我们就追加到列表当中
java">    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方法更新来实现交换操作。

java">//洗牌操作//把牌传过来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>,表中存储对应的五张牌

java">//三个人, 每个人轮流抓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)整体代码

java">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)测试

java">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,这样就生成了一组数据,每生成一组就追加到顺序表

java">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;}
}
java">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.ppmy.cn/news/1449059.html

相关文章

【mysql】mysql中的数据类型知多少?

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

排序算法(2)

文章目录 概要原理及实现归并排序定义性能代码Python 快速排序定义代码 小结 概要 接上回 在上篇说过经典的排序算法&#xff0c;有冒泡&#xff0c;插入&#xff0c;选择&#xff1b;归并&#xff0c;快排。其中讲了冒泡&#xff0c;插入&#xff0c;选择&#xff1b;这一回写…

【ARM Cache 系列文章 11 -- ARM Cache 直接映射 详细介绍】

请阅读【ARM Cache 系列文章专栏导读】 文章目录 ARM Cache组织形式直接映射(Direct Mapped)直接映射示例直接映射原理Cache颠簸(cache thrashing)原因文章:【ARM Cache 系列文章 11.1 – ARM Cache 全相连 详细介绍】 文章:【ARM Cache 系列文章 11.2 – ARM Cache 组相…

ArrayList知识点详解

目录 1.简介 2.ArrayList的使用 &#xff08;1&#xff09;如何实例化ArrayList&#xff1f;&#xff08;如何创建&#xff1f;&#xff09; &#xff08;2&#xff09;如何构造使用&#xff1f; &#xff08;3&#xff09;为什么ArrayList的无参构造可以添加数据 &#…

SpringMVC进阶(过滤器解决中文乱码,处理json以及文件上传下载)

文章目录 1.中文乱码处理1.引出问题1.恢复原来取消掉的属性绑定2.启动服务器&#xff0c;引出问题 2.自定义中文乱码过滤器1.MyCharacterFilter.java2.web.xml配置过滤器&#xff08;这个解决乱码的过滤器放到最前面&#xff09;3.结果展示 3.使用Spring过滤器处理&#xff08;…

就业班 第三阶段(nginx) 2401--4.26 day5 nginx5 nginx https部署实战

三、HTTPS 基本原理 1、https 介绍 HTTPS&#xff08;全称&#xff1a;HyperText Transfer Protocol over Secure Socket Layer&#xff09;&#xff0c;其实 HTTPS 并不是一个新鲜协议&#xff0c;Google 很早就开始启用了&#xff0c;初衷是为了保证数据安全。 近些年&…

【机器学习】CLIP模型在有限计算资源下的性能探究:从数据、架构到训练策略

CLIP模型在有限计算资源下的性能探究&#xff1a;从数据、架构到训练策略 一、数据&#xff1a;质量胜过数量&#xff0c;小规模亦可制胜三、训练策略&#xff1a;选择合适的方法以应对计算资源的挑战 在人工智能领域&#xff0c;多模态模型正逐渐成为研究的热点。其中&#xf…

C#开发-nullable类型的比较

C#天然支持nullable类型。很多类除了可以有值以外&#xff0c;还可以为null。这时候我们就有疑问了&#xff0c;如果nullable类型的值为null&#xff0c;它和有值的比较结果是什么&#xff1f;它和同样为null的变量比较结果是什么&#xff1f;我现在就来解答。 测试环境是.NET…