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

【java数据结构】ArrayList实例

【java数据结构】ArrayList实例

  • 一、杨辉三角
  • 二、打扑克

一、杨辉三角

在这里插入图片描述

已知条件:给定行数的大小

思路:首先定义一个二维列表(也可以称为集合),我们对每一列处理完,最后把每一列加起来,不就是完整的“杨辉三角”。所以接下来就是对每一列进行处理,已知杨辉三角每一列第一个数和最后一个数是1,所以这里直接list.add(1);中间部分遵循【i】【j】=【i-1】【j】+【i-1】【j-1】,但是这是个列表,我们并不知道上一列 ij 位置的数值,所以这里需要对上一列定义一个引用,方便我们接下来找到上一列的 ij

在这里插入图片描述
在这里插入图片描述


import java.util.ArrayList;
import java.util.List;
public class Main {public static List<List<Integer>> Triangle(int numrows){List<List<Integer>> ret=new ArrayList<>();//注释1List<Integer> list0=new ArrayList<>();list0.add(1);ret.add(list0);for (int i = 1; i < numrows; i++) {List<Integer> list=new ArrayList<>();//开头list.add(1);//中间//注释2List<Integer> tmp=ret.get(i-1);for (int j = 1; j < i; j++) {int val1= tmp.get(j);int val2= tmp.get(j-1);list.add(val1+val2);}//结尾list.add(1);ret.add(list);}return ret;}public static void main(String[] args) {List<List<Integer>> ret=Triangle(4);
//        for (int i = 0; i < ret.size(); i++) {
//            for (int j = 0; j < ret.get(i).size(); j++) {
//                System.out.print(ret.get(i).get(j)+" ");
//            }
//            System.out.println();
//        }for (List<Integer> x:ret) {System.out.println(x);}}
}

注释1:需要先将第一列定义出来,不定义第一列,如果 i从0开始, 则**List tmp=ret.get(i-1);**这段代码就会出现数组越界的异常。
注释2:因为需要获取上一列的【i-1】【j】和【i-1】【j-1】,所以这里需要先将上一列定义出来,这里的tmp是对象的引用,不是数组。

二、打扑克

已知扑克有1-13种数字,并且有四种花色"♥",“♠”,“♣”,“♦”。

需完成的任务:
1.首先需要定义一个列表(集合),存储这52张牌,因为有数字和花色两种。
2.获得52张牌后,需要将牌打乱。
3.最后三个人轮流摸牌。

定义一副牌,牌包括花色和大小,并且重写tostring()方法

public class Poker {int a;String str;public Poker(int a, String str) {this.a = a;this.str = str;}@Overridepublic String toString() {return "{"+a+str+"} ";}
}

有关牌的所有操作方法

import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class Method {List<List<Integer>> card=new ArrayList<>();public static String suit[]={"♥","♠","♣","♦"};public List<Poker> getPoker() {List<Poker> gPoker=new ArrayList<>();for (int i = 1; i <=13 ; i++) {for (int j = 0; j < 4; j++) {String s=suit[j];Poker poker=new Poker(i,s);gPoker.add(poker);}}return gPoker;}//打乱牌序public void Disrupt(List<Poker> pokers){Random random=new Random();for(int i =pokers.size()-1;i>0;i--){//随机产生i~1之间的数int index=random.nextInt(i);swap(pokers,i,index);}}public void swap(List<Poker> pokers,int i,int j){Poker tmp=pokers.get(i);pokers.set(i,pokers.get(j));pokers.set(j,tmp);}public List<List<Poker>> play (List<Poker> pokers){ List<Poker> hand0=new ArrayList<>();List<Poker> hand1=new ArrayList<>();List<Poker> hand2=new ArrayList<>();List<List<Poker>> hand = new ArrayList<>();hand.add(hand0);hand.add(hand1);hand.add(hand2);for (int i = 0; i < 5; i++) {for (int j = 0; j < 3; j++) {Poker poker =pokers.remove(0);hand.get(j).add(poker);}}return hand;}
}

main函数,调用牌的各种操作方法

import java.util.List;public class Test {public static void main(String[] args) {Method method = new Method();//获取牌List<Poker> ret = method.getPoker();//洗牌method.Disrupt(ret);System.out.println(ret);//三个人抓牌//3. 3个人 每个人 轮流揭牌5张List<List<Poker>> ret1 = method.play(ret);for (int i = 0; i < ret1.size(); i++) {System.out.println("第" + (i + 1) + "个人的牌:" + ret1.get(i));}System.out.println("剩下的牌:");System.out.println(ret);}
}

http://www.mrgr.cn/news/45798.html

相关文章:

  • webpack学习
  • java8 双冒号(::)使用方法
  • 【C++ 11】for 基于范围的循环
  • 以后再也不要说程序员不能拿诺贝尔了
  • CentOS7 虚拟机操作系统安装及相关配置教程
  • 算法:238.除自身以外数组的乘积
  • 简易CPU设计入门:取指令(四)
  • 1打家劫舍三部曲
  • Java中Collections类详解
  • Git管理远程仓库
  • 【动态规划-最长公共子序列(LCS)】【hard】力扣1092. 最短公共超序列
  • rust gio-rs 挂载 samba 磁盘
  • 【Java 并发编程】多线程安全问题(上)
  • 算法:724.寻找数组的中心下标
  • 面试(十)
  • 【JVM】内存分析工具JConsole/Visual VM
  • 每日OJ题_牛客_平方数_数学_C++_Java
  • 面试题:Redis(一)
  • 回到原点再出发
  • 职场上的人情世故,你知多少?这五点一定要了解