2019-01-01

作者: DreamPath | 来源:发表于2019-01-01 18:19 被阅读2次

    Day10 Collection、泛型类,及其扑克牌案例

    1.Collection集合

    1.1 集合的概述

    集合是java中提供的一种容器,可以来存储多个数据,长度不固定。

    1.2 集合框架

    • Collection:单列集合类根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是 java.util.List 和 java.util.Set 。

    • List 的特点是元素有序、元素可重复。 List 接口的主要实现类有 java.util.ArrayList 和 java.util.LinkedList ,

    • Set 的特点是元素无序,且不可重复。 Set 接口 的主要实现类有 java.util.HashSet 和 java.util.TreeSet 。

    • Vector类实现了可增长的对象数组。像数组一样,它包含可以使用整数索引访问的组件。但是,Vector的大小可以根据需要增大或缩小,以适应在创建Vector之后添加和删除项目。

    • 与新的集合实现不同,Vector是同步的。如果不需要线程安全实现,建议使用ArrayList代替Vector。

    1.3 Collection 常用功能

    • Collection是所有单列集合的父接口,其子类List(有序可重复)和Set(无序不可重复),也必须要具体的子类来实现。

    • *public boolean add(E e) : 把给定的对象添加到当前集合中 。

    • public void clear():清空集合中所有的元素。

    • public boolean remove(E e): 把给定的对象在当前集合中删除。

    • public boolean contains(E e): 判断当前集合中是否包含给定的对象。 public boolean isEmpty() : 判断当前集合是否为空。

    • public int size(): 返回集合中元素的个数。

    • public Object [] toArray(): 把集合中的元素,存储到数组中

    image

    2.Iterator迭代器

    2.1.java.util.Iterator是一个遍历集合得接口,故也称为迭代器。

    Student类省略
    2.2 增强for循环
    • 增强for循环又称foreach循环,可以对无索引的集合进行元素的增删操作。
    image

    3.泛型

    3.1能将指定集合的元素类型进行添加

         其中包括字符串String,Integer,Double,Long,Boolean,还能自定义泛型类。方法,接口,以及泛型通配符<?>。
    

    3.2使用泛型的好处:

    1.将运行时期的ClassCastException,转移到了编译时期变成了编译失败。

    2. 避免了类型强转的麻烦。

    3.3受限泛型的使用

    1.泛型的上限:

    格式: 类型名称 <? extends 类 > 对象名称

    意义: 只能接收该类型及其子类

    2.泛型的下限:

    格式: 类型名称 <? super 类 > 对象名称

    意义: 只能接收该类型及其父类型

    (short boolean int double float byte char string)-->Number-->Object

    java学习之扑克牌案例

    package pocker;
    import java.util.ArrayList;
    import java.util.Collections;
    /**
     * 需求:  三个玩家 玩斗地主  每个人拿17  最后剩下3张牌
     * 分析:
     *      创建一个集合存放2,3,4,5,6,7,8,9,10
     *      创建一个集合存放字母:J,Q,K,A
     *      再创建一个集合存放花色 ♦ ,♣,♠,♥。
     *      创建好牌以后进行洗牌使用Collections的工具类中的一个方法来打乱牌的顺序
     *      然后需要创建三个玩家
     *      每个玩家都会存放自己的牌,因此需要定义玩家集合
     *      然后在定义当索引小于51时需要将牌分别存放在三个玩家手上。
     *      大于等于51也就是三张底牌直接存放在底牌的集合中
     */
    public class Poker_demo {
        public static void main(String[] args) {
         //创建牌
            //创建牌盒的集合
          ArrayList<String> pokers=new ArrayList<>();
            //存放数字及其J Q K A
            ArrayList<String> list = new ArrayList<>();
            for (int i = 2; i <=10; i++) {
             //将Integer类型直接转换成String添加到集合中
                list.add(i+"");
            }
            list.add("J");
            list.add("Q");
            list.add("K");
            list.add("A");
            //存放花色
            ArrayList<String> color = new ArrayList<>();
            color.add("♦");
            color.add("♣");
            color.add("♠");
            color.add("♥");
           // 拿出每一个花色  然后跟每一个数字 进行结合  存储到牌盒中
            for (String str:color) {
                for (String st:list) {
                    String sts=str+st;
                    pokers.add(sts);
                }
            }
            pokers.add("大王🃏");
            pokers.add("小王🃏");
    
            //遍历一下这个集合
            for (int i = 0; i <pokers.size(); i++) {
                System.out.println(pokers.get(i));
            }
     //   洗牌
        xiPai(pokers);
    
     //发牌
        FaPai(pokers);
        }
        private static void FaPai(ArrayList pokers) {
            ArrayList<String> wanJia1 = new ArrayList<>();
            ArrayList<String> wanJia2 = new ArrayList<>();
            ArrayList<String> wanJia3 = new ArrayList<>();
            ArrayList<String> diPai = new ArrayList<>();
            //一共有54张牌,每个人17张之后需要剩下3张作为底牌,51张牌是每个人必须的牌
            for (int i = 0; i <pokers.size(); i++) {
                String po = String.valueOf(pokers.get(i));
                if (i>=51) {
                    diPai.add(po);  }
                    else {
    
                    if (i % 3 == 0) {
                        wanJia1.add(po);
                    } else if (i % 3 == 1) {
                        wanJia2.add(po);
                    } else if (i % 3 == 2) {
                        wanJia3.add(po);
                    }
                }
            }
            System.out.println("玩家一的牌:"+wanJia1);
            System.out.println("玩家二的牌:"+wanJia2);
            System.out.println("玩家三的牌:"+wanJia3);
            System.out.println("底牌:"+diPai);
        }
        private static void xiPai(ArrayList pokers) {
            Collections.shuffle(pokers);
        }
    }
    
    

    思考:
    1.那怎么去将底牌发给地主呢,又如何去确定地主?
    2.三个玩家手中的牌又如何来再次排序呢?

    相关文章

      网友评论

        本文标题:2019-01-01

        本文链接:https://www.haomeiwen.com/subject/zwtolqtx.html