Collection的其他相关知识

前置知识:可变参数

可变参数
就是一种特殊形参,定义在方法、构造器的形参列表里,格式是:数据类型...参数名称;
可变参数的特点和好处
特点:可以不传数据给它;可以传一个或者同时传多个数据给它;也可以传一个数组给它,
好处:常常用来灵活的接收数据。

可变参数的注意事项:

  • 可变参数在方法内部就是一个数组。
  • 一个形参列表中可变参数只能有一个。
  • 可变参数必须放在形参列表的最后面。

8524a8933ff34e5680f0c046d9d9c831.png代码演示

集合的工具类:Collecitons

 

16238ac0815447cba2d7178a5ab74952.png

d1e718169f7a4c1192bf9bfcdb2c551c.png

综合案例(斗地主)

474ebdf67f2343ab815a540e57c06691.png打牌功能需要通信暂时不会

代码:



/**
 *目标:斗地主游戏的案例开发
 * 业务需求分析:
 *       业务:总共有54张牌
 *       点数:"3","4","5","6",'7","8","9","10","J","Q","K","A","2"
 *       花色:"♠","♥","♣","♦"
 *       大小王:"🤡","🃏"
 *       点数分别要组合4种花色,大小王各一张。
 *       斗地主:发出51张牌,剩下3张作为底牌
 */
public class GameDemo {
    public static void main(String[] args) {
        //1.牌类
        //2.房间
        Room m = new Room();
        //3.启动游戏
        m.start();
    }
}


public class Card {
    private String number;
    private String color;
    private int size;//0 1 2 ...

    public Card() {
    }

    public Card(String number, String color, int size) {
        this.number = number;
        this.color = color;
        this.size = size;
    }

    public String getNumber() {
        return number;
    }

    public void setNumber(String number) {
        this.number = number;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    @Override
    public String toString() {
        return number + color;// + "-->" + size;

    }
}


import java.util.*;

public class Room {
    //必须有一副牌
    private List<Card> allCards = new ArrayList<>();

    public Room() {
        //1.做出54张牌,存入到集合allCards
        //a.点数:个数确定了,类型确定。
        String[] nunbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
        //b.花色:个数确定了,类型确定。
        String[] colors = {"♠", "♥", "♣", "♦"};
        int size = 0;//表示每张牌的大小
        //c.遍历点数,再遍历花色,组织牌
        for (String nunber : nunbers) {
            size++;//1 2 ...
            //number = "3"
            for (String color : colors) {
                //得到一张牌
                Card c = new Card(nunber, color, size);
                allCards.add(c);
            }
        }
        //单独存入小大王
        Card c1 = new Card("", "🃏", ++size);//没有点数
        Card c2 = new Card("", "🤡", ++size);
        Collections.addAll(allCards, c1, c2);
        System.out.println("新牌:" + allCards);
    }

    /*
     * 游戏启动
     * */
    public void start() {
        //1.洗牌: allCards
        Collections.shuffle(allCards);
        System.out.println("洗牌后:" + allCards);

        //3.发牌 首先肯定要定义三个玩家 再去创建对象的话会显得十分复杂
        //用一个集合来代表一个玩家,来装玩家的牌List —— ArrayList
        List<Card> linHuChong = new ArrayList<>();
        List<Card> jiuMoZhi = new ArrayList<>();
        List<Card> renYingYing = new ArrayList<>();
        //正式发牌给三个玩家,依次发出51张牌,剩下三张作为底牌
        for (int i = 0; i < allCards.size() - 3; i++) {
            Card c = allCards.get(i);
            //判断牌发给谁
            if (i % 3 == 0) {
                linHuChong.add(c);
            } else if (i % 3 == 1) {
                jiuMoZhi.add(c);
            } else {
                renYingYing.add(c);
            }
        }

        //3.对3个玩家的牌进行排序
        sortCards(linHuChong);
        sortCards(jiuMoZhi);
        sortCards(renYingYing);
        //4.看牌
        System.out.println("啊冲:" + linHuChong);
        System.out.println("啊鸠:" + jiuMoZhi);
        System.out.println("盈盈:" + renYingYing);
        List<Card> lastThressCards = allCards.subList(allCards.size() - 3, allCards.size());//包前不包后 截取一个元素成为一个集合
        //把最后三张底牌截到一个集合中去可以方便后边抢地主直接把底牌倒入地主玩家手牌
        System.out.println("底牌:" + lastThressCards);
        jiuMoZhi.addAll(lastThressCards);
        sortCards(jiuMoZhi);
        System.out.println("啊鸠抢到地主后:" + jiuMoZhi);
    }

    /**
     * 集中进行排序
     *
     * @param cards
     */

    /*private void sortCards(List<Card> cards) {
        Collections.sort(cards, new Comparator<Card>() {//new 一个比较器对象进行排序
            @Override
            public int compare(Card o1, Card o2) {
                //return o1.getSize() - o2.getSize();//升序
                return Integer.compare(o2.getSize(), o1.getSize());
            }
        });
    }*/
    //Lambda表达式简化
    private void sortCards(List<Card> cards) {
        Collections.sort(cards, (o1, o2) -> Integer.compare(o2.getSize(), o1.getSize()));
    }
}

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值