【java数据结构】ArrayList实例

【java数据结构】ArrayList实例


此篇博客希望对你有所帮助(帮助你更加深入了解ArrayLIst类),不懂的或有错误的也可在评论区留言,错误必改评论必回!!!持续关注,下一篇博客是【java数据结构】链表!!!整篇博客的代码都在Gitee中(代码链接放下文章结尾)。

一、杨辉三角

在这里插入图片描述

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

思路:首先定义一个二维列表(也可以称为集合),我们对每一列处理完,最后把每一列加起来,不就是完整的“杨辉三角”。所以接下来就是对每一列进行处理,已知杨辉三角每一列第一个数和最后一个数是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<>();
        //注释1
        List<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);
            //中间
            //注释2
            List<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;
    }

    @Override
    public 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);

    }
}

此篇博客的全部代码!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值