资讯专栏INFORMATION COLUMN

1、Map接口 2、模拟斗地主洗牌发牌

付伦 / 3127人阅读

摘要:中的集合称为单列集合,中的集合称为双列集合。洗牌通过数字完成洗牌发牌发牌将每个人以及底牌设计为将最后张牌直接存放于底牌,剩余牌通过对取模依次发牌。存放的过程中要求数字大小与斗地主规则的大小对应。

01Map集合概述

A:Map集合概述:

我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它们存储数据的形式不同
    a:Collection中的集合,元素是孤立存在的(理解为单身),向集合中存储元素采用一个个元素的方式存储。
    
    b:Map中的集合,元素是成对存在的(理解为夫妻)。每个元素由键与值两部分组成,通过键可以找对所对应的值。
 
    Collection中的集合称为单列集合,Map中的集合称为双列集合。
    需要注意的是,Map中的集合不能包含重复的键,值可以重复;每个键只能对应一个值。
Map
 |--HashMap
 |--LinkedHashMap
02Map接口中的常用方法

A:Map接口中的常用方法

   /*
    *  Map接口中的常用方法
    *    使用Map接口的实现类 HashMap
    */
   public class MapDemo {
       public static void main(String[] args) {
           function_2();
       }
       /*
        *  移除集合中的键值对,返回被移除之前的值
        *  V remove(K)
        */
       public static void function_2(){
           Map map = new HashMap();
           map.put(1, "a");
           map.put(2, "b");
           map.put(3, "c");
           System.out.println(map);
           
           String value = map.remove(33);
           System.out.println(value);
           System.out.println(map);
       }
       
       /*
        * 通过键对象,获取值对象
        * V get(K)
        * 如果集合中没有这个键,返回null
        */
       public static void function_1(){
           //创建集合对象,作为键的对象整数,值的对象存储字符串
           Map map = new HashMap();
           map.put(1, "a");
           map.put(2, "b");
           map.put(3, "c");
           System.out.println(map);
           
           String value = map.get(4);
           System.out.println(value);
       }
       
       /*
        *  将键值对存储到集合中
        *  V put(K,V) K 作为键的对象, V作为值的对象
        *  存储的是重复的键,将原有的值,覆盖
        *  返回值一般情况下返回null,
        *  存储重复键的时候,返回被覆盖之前的值
        */
       public static void function(){
           //创建集合对象,HashMap,存储对象,键是字符串,值是整数
           Map map = new HashMap();
           map.put("a", 1);
           
           map.put("b", 2);
           
           map.put("c", 3);
           
           System.out.println(map);
       }
   }
03Map集合遍历方式keySet方法

A:Map集合遍历方式keySet方法

 1.获取Map集合中所有的键,由于键是唯一的,所以返回一个Set集合存储所有的键
 2.遍历键的Set集合,得到每一个键
 3.根据键利用get(key)去Map找所对应的值
 /*
  *  Map集合的遍历
  *    利用键获取值
  *    Map接口中定义方法keySet
  *    所有的键,存储到Set集合
  */
 public class MapDemo1 {
     public static void main(String[] args) {
         /*
          *  1. 调用map集合的方法keySet,所有的键存储到Set集合中
          *  2. 遍历Set集合,获取出Set集合中的所有元素 (Map中的键)
          *  3. 调用map集合方法get,通过键获取到值
          */
         Map map = new HashMap();
         map.put("a", 11);
         map.put("b", 12);
         map.put("c", 13);
         map.put("d", 14);
         
         //1. 调用map集合的方法keySet,所有的键存储到Set集合中
         Set set = map.keySet();
         //2. 遍历Set集合,获取出Set集合中的所有元素 (Map中的键)
         Iterator it = set.iterator();
         while(it.hasNext()){
             //it.next返回是Set集合元素,也就是Map中的键
             //3. 调用map集合方法get,通过键获取到值
             String key = it.next();
             Integer value = map.get(key);
             System.out.println(key+"...."+value);
         }
         
         System.out.println("=======================");
         

         for(String key : map.keySet()){
             Integer value = map.get(key);
             System.out.println(key+"...."+value);
         }
     }
 }

04Map集合Entry对象

A:Map集合Entry对象

 interface Map{
     interface Entry{//Entry是Map的一个内部接口
                    //由Map的子类的内部类实现

     }
 }
 class HashMap{
     static class Entry implements Map.Entry {//Entry对象指的就是该类的对象
        final K key;
              V value;
     }
 }
 在Map类设计时,提供了一个嵌套接口:Entry。
 Entry将键值对的对应关系封装成了对象。
 即键值对对象,这样我们在遍历Map集合时,就可以从每一个键值对(Entry)对象中获取对应的键与对应的值。
   a:Entry是Map接口中提供的一个静态内部嵌套接口。
   b:相关方法
      getKey()方法:获取Entry对象中的键
   getValue()方法:获取Entry对象中的值
   entrySet()方法:用于返回Map集合中所有的键值对(Entry)对象,以Set集合形式返回。
05Map集合遍历方式entrySet方法

A:Map集合遍历方式entrySet方法

*
 *  Map集合获取方式
 *  entrySet方法,键值对映射关系(结婚证)获取
 *  实现步骤:
 *    1. 调用map集合方法entrySet()将集合中的映射关系对象,存储到Set集合
 *        Set >
 *    2. 迭代Set集合
 *    3. 获取出的Set集合的元素,是映射关系对象
 *    4. 通过映射关系对象方法 getKet, getValue获取键值对
 *    
 *    创建内部类对象 外部类.内部类 = new 
 */
public class MapDemo2 {
    public static void main(String[] args) {
        Map map = new HashMap();
        map.put(1, "abc");
        map.put(2, "bcd");
        map.put(3, "cde");
        //1. 调用map集合方法entrySet()将集合中的映射关系对象,存储到Set集合
        Set >  set = map.entrySet();
        //2. 迭代Set集合
        Iterator > it = set.iterator();
        while(it.hasNext()){
            //  3. 获取出的Set集合的元素,是映射关系对象
            // it.next 获取的是什么对象,也是Map.Entry对象
            Map.Entry entry = it.next();
            //4. 通过映射关系对象方法 getKet, getValue获取键值对
            Integer key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+"...."+value);
        }
        
         
    }
}

=======================第二节课开始============================================

06Map集合遍历方式增强for循环

A:Map集合遍历方式增强for循环

 A:Map集合遍历方式entrySet方法
  *
   *  Map集合获取方式
   *  entrySet方法,键值对映射关系(结婚证)获取
   *  实现步骤:
   *    1. 调用map集合方法entrySet()将集合中的映射关系对象,存储到Set集合
   *        Set >
   *    2. 迭代Set集合
   *    3. 获取出的Set集合的元素,是映射关系对象
   *    4. 通过映射关系对象方法 getKet, getValue获取键值对
   *    
   *    创建内部类对象 外部类.内部类 = new 
   */
  public class MapDemo2 {
      public static void main(String[] args) {
          Map map = new HashMap();
          map.put(1, "abc");
          map.put(2, "bcd");
          map.put(3, "cde");
          //1. 调用map集合方法entrySet()将集合中的映射关系对象,存储到Set集合
          Set >  set = map.entrySet();
          //2. 迭代Set集合
          Iterator > it = set.iterator();
          while(it.hasNext()){
              //  3. 获取出的Set集合的元素,是映射关系对象
              // it.next 获取的是什么对象,也是Map.Entry对象
              Map.Entry entry = it.next();
              //4. 通过映射关系对象方法 getKet, getValue获取键值对
              Integer key = entry.getKey();
              String value = entry.getValue();
              System.out.println(key+"...."+value);
          }
          
          System.out.println("=========================");
          for(Map.Entry entry : map.entrySet()){
              System.out.println(entry.getKey()+"..."+entry.getValue());
          }
      }
  }
  
  注意:Map集合不能直接使用迭代器或者foreach进行遍历。但是转成Set之后就可以使用了。
07HashMap集合存储和遍历

A:HashMap集合存储和遍历

 /*
  *  使用HashMap集合,存储自定义的对象
  *  自定义对象,作为键,出现,作为值出现
  */
 public class HashMapDemo {
     public static void main(String[] args) {
         function_1();
     }
     /*
      * HashMap 存储自定义对象Person,作为键出现
      * 键的对象,是Person类型,值是字符串
      * 保证键的唯一性,存储到键的对象,重写hashCode equals
      */
     public static void function_1(){
         HashMap map = new HashMap();
         map.put(new Person("a",20), "里约热内卢");
         map.put(new Person("b",18), "索马里");
         map.put(new Person("b",18), "索马里");
         map.put(new Person("c",19), "百慕大");
         for(Person key : map.keySet()){
             String value = map.get(key);
             System.out.println(key+"..."+value);
         }
         System.out.println("===================");
         for(Map.Entry entry : map.entrySet()){
             System.out.println(entry.getKey()+"..."+entry.getValue());
         }
     }
     
     /*
      * HashMap 存储自定义的对象Person,作为值出现
      * 键的对象,是字符串,可以保证唯一性
      */
     public static void function(){
         HashMap map = new HashMap();
         map.put("beijing", new Person("a",20));
         map.put("tianjin", new Person("b",18));
         map.put("shanghai", new Person("c",19));
         for(String key : map.keySet()){
             Person value = map.get(key);
             System.out.println(key+"..."+value);
         }
         System.out.println("=================");
         for(Map.Entry entry : map.entrySet()){
             String key = entry.getKey();
             Person value = entry.getValue();
             System.out.println(key+"..."+value);
         }
     }
 }
08LinkedHashMap的特点

*A:LinkedHashMap的特点

  
  /*
   *  LinkedHashMap继承HashMap
   *  保证迭代的顺序
   */
  public class LinkedHashMapDemo {
      public static void main(String[] args) {
          LinkedHashMap link = new LinkedHashMap();
          link.put("1", "a");
          link.put("13", "a");
          link.put("15", "a");
          link.put("17", "a");
          System.out.println(link);
      }
  }
09Hashtable的特点

*A:Hashtable的特点

   /*
    *  Map接口实现类 Hashtable
    *  底层数据结果哈希表,特点和HashMap是一样的
    *  Hashtable 线程安全集合,运行速度慢
    *  HashMap 线程不安全的集合,运行速度快
    *  
    *  Hashtable命运和Vector是一样的,从JDK1.2开始,被更先进的HashMap取代
    *  
    *  HashMap 允许存储null值,null键
    *  Hashtable 不允许存储null值,null键
    *  
    *  Hashtable他的孩子,子类 Properties 依然活跃在开发舞台
    */
   public class HashtableDemo {
       public static void main(String[] args) {    
           Map map = new Hashtable();
           map.put(null, null);
           System.out.println(map);
       }
   }
10静态导入

*A:静态导入:如果本类中有和静态导入的同名方法会优先使用本类的

           如果还想使用静态导入的,依然需要类名来调用
   /*
    * JDK1.5新特性,静态导入
    * 减少开发的代码量
    * 标准的写法,导入包的时候才能使用
    * 
    * import static java.lang.System.out;最末尾,必须是一个静态成员
    */
   import static java.lang.System.out;
   import static java.util.Arrays.sort;
   public class StaticImportDemo {
       public static void main(String[] args) {
           out.println("hello");
           
           int[] arr = {1,4,2};
           sort(arr);
       }
   }
11方法的可变参数

*A:方法的可变参数

 /*
  *  JDK1.5新的特性,方法的可变参数
  *  前提: 方法参数数据类型确定,参数的个数任意
  *  可变参数语法: 数据类型...变量名
  *  可变参数,本质就是一个数组
  */
 public class VarArgumentsDemo {
     public static void main(String[] args) {
         //调用一个带有可变参数的方法,传递参数,可以任意
     //    getSum();
         int sum = getSum(5,34,3,56,7,8,0);
         System.out.println(sum);

     }
 
     /*
      * 定义方法,计算10个整数和
      * 方法的可变参数实现
      */
     public static int getSum(int...a){
         int sum = 0 ;
         for(int i : a){
             sum = sum + i;
         }
         return sum;
     }
     
     /*
      * 定义方法,计算3个整数和
      */
     /*public static int getSum(int a,int b ,int c){
         return a+b+c;
     }*/
     
     /*
      * 定义方法,计算2个整数和
      */
     /*public static int getSum(int a,int b){
         return a+b;
     }*/
 }
12可变参数的注意事项

*A:可变参数的注意事项

   /*
    * 可变参数的注意事项
    * 1. 一个方法中,可变参数只能有一个
    * 2. 可变参数,必须写在参数列表的最后一位
    */
    public static void function(Object...o){
        
    }

=======================第三节课开始=============================================

13Collections工具类

A:Collections工具类

  /*
   *  集合操作的工具类
   *    Collections
   */
  public class CollectionsDemo {
      public static void main(String[] args) {
          function_2();
      }
      /*
       * Collections.shuffle方法
       * 对List集合中的元素,进行随机排列
       */
      public static void function_2(){
          List list = new ArrayList();
          list.add(1);
          list.add(5);
          list.add(9);
          list.add(11);
          list.add(8);
          list.add(10);
          list.add(15);
          list.add(20);    
          System.out.println(list);
          
          //调用工具类方法shuffle对集合随机排列
          Collections.shuffle(list);
          System.out.println(list);
      }
      
      /*
       * Collections.binarySearch静态方法
       * 对List集合进行二分搜索,方法参数,传递List集合,传递被查找的元素
       */
      public static void function_1(){
          List list = new ArrayList();
          list.add(1);
          list.add(5);
          list.add(8);
          list.add(10);
          list.add(15);
          list.add(20);
          //调用工具类静态方法binarySearch
          int index = Collections.binarySearch(list, 16);
          System.out.println(index);
      }
      
      /*
       *  Collections.sort静态方法
       *  对于List集合,进行升序排列
       */
      public static void function(){
          //创建List集合
          List list = new ArrayList();
          list.add("ewrew");
          list.add("qwesd");
          list.add("Qwesd");
          list.add("bv");
          list.add("wer");
          System.out.println(list);
          //调用集合工具类的方法sort
          Collections.sort(list);
          System.out.println(list);
      }
  }
14集合的嵌套

A:集合的嵌套

/*
 *  Map集合的嵌套,Map中存储的还是Map集合
 *  要求:
 *    传智播客  
 *      Java基础班
 *        001  张三
 *        002  李四
 *      
 *      Java就业班
 *        001  王五
 *        002  赵六
 *  对以上数据进行对象的存储
 *   001 张三  键值对
 *   Java基础班: 存储学号和姓名的键值对
 *   Java就业班:
 *   传智播客: 存储的是班级
 *   
 *   基础班Map   <学号,姓名>
 *   传智播客Map  <班级名字, 基础班Map>
 */
public class MapMapDemo {
    public static void main(String[] args) {
        //定义基础班集合
        HashMap javase = new HashMap();
        //定义就业班集合
        HashMap javaee = new HashMap();
        //向班级集合中,存储学生信息
        javase.put("001", "张三");
        javase.put("002", "李四");
        
        javaee.put("001", "王五");
        javaee.put("002", "赵六");
        //定义传智播客集合容器,键是班级名字,值是两个班级容器
        HashMap> czbk =
                new HashMap>();
        czbk.put("基础班", javase);
        czbk.put("就业班", javaee);
        
         keySet(czbk);
         
    }
15集合的嵌套keySet遍历

A:集合的嵌套keySet遍历

   /*
    *  Map集合的嵌套,Map中存储的还是Map集合
    *  要求:
    *    传智播客  
    *      Java基础班
    *        001  张三
    *        002  李四
    *      
    *      Java就业班
    *        001  王五
    *        002  赵六
    *  对以上数据进行对象的存储
    *   001 张三  键值对
    *   Java基础班: 存储学号和姓名的键值对
    *   Java就业班:
    *   传智播客: 存储的是班级
    *   
    *   基础班Map   <学号,姓名>
    *   传智播客Map  <班级名字, 基础班Map>
    */
   public class MapMapDemo {
       public static void main(String[] args) {
           //定义基础班集合
           HashMap javase = new HashMap();
           //定义就业班集合
           HashMap javaee = new HashMap();
           //向班级集合中,存储学生信息
           javase.put("001", "张三");
           javase.put("002", "李四");
           
           javaee.put("001", "王五");
           javaee.put("002", "赵六");
           //定义传智播客集合容器,键是班级名字,值是两个班级容器
           HashMap> czbk =
                   new HashMap>();
           czbk.put("基础班", javase);
           czbk.put("就业班", javaee);
           
            keySet(czbk);
            
       }
       
        
       
       public static void keySet(HashMap> czbk){
           //调用czbk集合方法keySet将键存储到Set集合
           Set classNameSet = czbk.keySet();
           //迭代Set集合
           Iterator classNameIt = classNameSet.iterator();
           while(classNameIt.hasNext()){
               //classNameIt.next获取出来的是Set集合元素,czbk集合的键
               String classNameKey = classNameIt.next();
               //czbk集合的方法get获取值,值是一个HashMap集合
               HashMap classMap = czbk.get(classNameKey);
               //调用classMap集合方法keySet,键存储到Set集合
               Set studentNum = classMap.keySet();
               Iterator studentIt = studentNum.iterator();
          
               while(studentIt.hasNext()){
                   //studentIt.next获取出来的是classMap的键,学号
                   String numKey = studentIt.next();
                   //调用classMap集合中的get方法获取值
                   String nameValue = classMap.get(numKey);
                   System.out.println(classNameKey+".."+numKey+".."+nameValue);
               }
           }
           
           System.out.println("==================================");
           for(String className: czbk.keySet()){
              HashMap hashMap = czbk.get(className);    
              for(String numKey : hashMap.keySet()){
                  String nameValue = hashMap.get(numKey);
                  System.out.println(className+".."+numKey+".."+nameValue);
              }
           }
       }

   } 
  
16集合的嵌套entrySet遍历
A:集合的嵌套entrySet遍历
/*
 *  Map集合的嵌套,Map中存储的还是Map集合
 *  要求:
 *    传智播客  
 *      Java基础班
 *        001  张三
 *        002  李四
 *      
 *      Java就业班
 *        001  王五
 *        002  赵六
 *  对以上数据进行对象的存储
 *   001 张三  键值对
 *   Java基础班: 存储学号和姓名的键值对
 *   Java就业班:
 *   传智播客: 存储的是班级
 *   
 *   基础班Map   <学号,姓名>
 *   传智播客Map  <班级名字, 基础班Map>
 */
public class MapMapDemo {
    public static void main(String[] args) {
        //定义基础班集合
        HashMap javase = new HashMap();
        //定义就业班集合
        HashMap javaee = new HashMap();
        //向班级集合中,存储学生信息
        javase.put("001", "张三");
        javase.put("002", "李四");
        
        javaee.put("001", "王五");
        javaee.put("002", "赵六");
        //定义传智播客集合容器,键是班级名字,值是两个班级容器
        HashMap> czbk =
                new HashMap>();
        czbk.put("基础班", javase);
        czbk.put("就业班", javaee);
        
        entrySet(czbk);
    }
    
    public static void entrySet(HashMap> czbk){
        //调用czbk集合方法entrySet方法,将czbk集合的键值对关系对象,存储到Set集合
        Set>> 
                                 classNameSet = czbk.entrySet();
        //迭代器迭代Set集合
        Iterator>> classNameIt = classNameSet.iterator();
        while(classNameIt.hasNext()){
            //classNameIt.next方法,取出的是czbk集合的键值对关系对象
            Map.Entry> classNameEntry =  classNameIt.next();
            //classNameEntry方法 getKey,getValue
            String classNameKey = classNameEntry.getKey();
            //获取值,值是一个Map集合
            HashMap classMap = classNameEntry.getValue();
            //调用班级集合classMap方法entrySet,键值对关系对象存储Set集合
            Set> studentSet = classMap.entrySet();
            //迭代Set集合
            Iterator> studentIt = studentSet.iterator();
            while(studentIt.hasNext()){
                //studentIt方法next获取出的是班级集合的键值对关系对象
                Map.Entry studentEntry = studentIt.next();
                //studentEntry方法 getKey getValue
                String numKey = studentEntry.getKey();
                String nameValue = studentEntry.getValue();
                System.out.println(classNameKey+".."+numKey+".."+nameValue);
            }
        }
         System.out.println("==================================");
        
        for (Map.Entry> me : czbk.entrySet()) {
            String classNameKey = me.getKey();
            HashMap numNameMapValue = me.getValue();
            for (Map.Entry nameMapEntry : numNameMapValue.entrySet()) {
                String numKey = nameMapEntry.getKey();
                String nameValue = nameMapEntry.getValue();
                System.out.println(classNameKey + ".." + numKey + ".." + nameValue);
            }
        }
    }
    

}

=======================第四节课开始=============================================

17斗地主的功能分析

A:斗地主的功能分析

   a:具体规则:
           1. 组装54张扑克牌
        2. 将54张牌顺序打乱
           3. 三个玩家参与游戏,三人交替摸牌,每人17张牌,最后三张留作底牌。
           4. 查看三人各自手中的牌(按照牌的大小排序)、底牌
   b:分析:
      1.准备牌:
       完成数字与纸牌的映射关系:
       使用双列Map(HashMap)集合,完成一个数字与字符串纸牌的对应关系(相当于一个字典)。
      2.洗牌:
       通过数字完成洗牌发牌
      3.发牌:
       将每个人以及底牌设计为ArrayList,将最后3张牌直接存放于底牌,剩余牌通过对3取模依次发牌。
       存放的过程中要求数字大小与斗地主规则的大小对应。
       将代表不同纸牌的数字分配给不同的玩家与底牌。
      4.看牌:
       通过Map集合找到对应字符展示。
       通过查询纸牌与数字的对应关系,由数字转成纸牌字符串再进行展示。
18斗地主的准备牌

A:斗地主的准备牌

 /*
  *  实现模拟斗地主的功能
  *   1. 组合牌
  *   2. 洗牌
  *   3. 发牌
  *   4. 看牌
  */
 public class DouDiZhu {
     public static void main(String[] args) {
         //1. 组合牌
         //创建Map集合,键是编号,值是牌
         HashMap pooker = new HashMap();
         //创建List集合,存储编号
         ArrayList pookerNumber = new ArrayList();
         //定义出13个点数的数组
         String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
         //定义4个花色数组
         String[] colors = {"♠","♥","♣","♦"};
         //定义整数变量,作为键出现
         int index = 2;
         //遍历数组,花色+点数的组合,存储到Map集合
         for(String number : numbers){
             for(String color : colors){
                 pooker.put(index, color+number);
                 pookerNumber.add(index);
                 index++;
             }
         }
         //存储大王,和小王,索引是从0~54,对应大王,小王,...3(牌的顺序从大到小)
         pooker.put(0, "大王");
         pookerNumber.add(0);
         pooker.put(1, "小王");
         pookerNumber.add(1);
      
 }
19斗地主的洗牌
A:斗地主的洗牌
  /*
   *  实现模拟斗地主的功能
   *   1. 组合牌
   *   2. 洗牌
   *   3. 发牌
   *   4. 看牌
   */
  public class DouDiZhu {
      public static void main(String[] args) {
          //1. 组合牌
          //创建Map集合,键是编号,值是牌
          HashMap pooker = new HashMap();
          //创建List集合,存储编号
          ArrayList pookerNumber = new ArrayList();
          //定义出13个点数的数组
          String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
          //定义4个花色数组
          String[] colors = {"♠","♥","♣","♦"};
          //定义整数变量,作为键出现
          int index = 2;
          //遍历数组,花色+点数的组合,存储到Map集合
          for(String number : numbers){
              for(String color : colors){
                  pooker.put(index, color+number);
                  pookerNumber.add(index);
                  index++;
              }
          }
          //存储大王,和小王
          pooker.put(0, "大王");
          pookerNumber.add(0);
          pooker.put(1, "小王");
          pookerNumber.add(1);
          
          //洗牌,将牌的编号打乱
          Collections.shuffle(pookerNumber);
          
       
      }
       
  }
20斗地主的发牌

A:斗地主的发牌

/*
 *  实现模拟斗地主的功能
 *   1. 组合牌
 *   2. 洗牌
 *   3. 发牌
 *   4. 看牌
 */
public class DouDiZhu {
    public static void main(String[] args) {
        //1. 组合牌
        //创建Map集合,键是编号,值是牌
        HashMap pooker = new HashMap();
        //创建List集合,存储编号
        ArrayList pookerNumber = new ArrayList();
        //定义出13个点数的数组
        String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        //定义4个花色数组
        String[] colors = {"♠","♥","♣","♦"};
        //定义整数变量,作为键出现
        int index = 2;
        //遍历数组,花色+点数的组合,存储到Map集合
        for(String number : numbers){
            for(String color : colors){
                pooker.put(index, color+number);
                pookerNumber.add(index);
                index++;
            }
        }
        //存储大王,和小王
        pooker.put(0, "大王");
        pookerNumber.add(0);
        pooker.put(1, "小王");
        pookerNumber.add(1);
        
        //洗牌,将牌的编号打乱
        Collections.shuffle(pookerNumber);
        
        //发牌功能,将牌编号,发给玩家集合,底牌集合
        ArrayList player1 = new ArrayList();
        ArrayList player2 = new ArrayList();
        ArrayList player3 = new ArrayList();
        ArrayList bottom = new ArrayList();
        
        //发牌采用的是集合索引%3
        for(int i = 0 ; i < pookerNumber.size() ; i++){
            //先将底牌做好
            if(i < 3){
                //存到底牌去
                bottom.add( pookerNumber.get(i));
               //对索引%3判断
            }else if(i % 3 == 0){
                //索引上的编号,发给玩家1
                player1.add( pookerNumber.get(i) );
            }else if( i % 3 == 1){
                //索引上的编号,发给玩家2
                player2.add( pookerNumber.get(i) );
            }else if( i % 3 == 2){
                //索引上的编号,发给玩家3
                player3.add( pookerNumber.get(i) );
            }
        }
         
    }
     
}
21斗地主的看牌

A:斗地主的看牌

 /*
  *  实现模拟斗地主的功能
  *   1. 组合牌
  *   2. 洗牌
  *   3. 发牌
  *   4. 看牌
  */
 public class DouDiZhu {
     public static void main(String[] args) {
         //1. 组合牌
         //创建Map集合,键是编号,值是牌
         HashMap pooker = new HashMap();
         //创建List集合,存储编号
         ArrayList pookerNumber = new ArrayList();
         //定义出13个点数的数组
         String[] numbers = {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};
         //定义4个花色数组
         String[] colors = {"♠","♥","♣","♦"};
         //定义整数变量,作为键出现
         int index = 2;
         //遍历数组,花色+点数的组合,存储到Map集合
         for(String number : numbers){
             for(String color : colors){
                 pooker.put(index, color+number);
                 pookerNumber.add(index);
                 index++;
             }
         }
         //存储大王,和小王
         pooker.put(0, "大王");
         pookerNumber.add(0);
         pooker.put(1, "小王");
         pookerNumber.add(1);
         
         //洗牌,将牌的编号打乱
         Collections.shuffle(pookerNumber);
         
         //发牌功能,将牌编号,发给玩家集合,底牌集合
         ArrayList player1 = new ArrayList();
         ArrayList player2 = new ArrayList();
         ArrayList player3 = new ArrayList();
         ArrayList bottom = new ArrayList();
         
         //发牌采用的是集合索引%3
         for(int i = 0 ; i < pookerNumber.size() ; i++){
             //先将底牌做好
             if(i < 3){
                 //存到底牌去
                 bottom.add( pookerNumber.get(i));
                //对索引%3判断
             }else if(i % 3 == 0){
                 //索引上的编号,发给玩家1
                 player1.add( pookerNumber.get(i) );
             }else if( i % 3 == 1){
                 //索引上的编号,发给玩家2
                 player2.add( pookerNumber.get(i) );
             }else if( i % 3 == 2){
                 //索引上的编号,发给玩家3
                 player3.add( pookerNumber.get(i) );
             }
         }
         //对玩家手中的编号排序
         Collections.sort(player1);
         Collections.sort(player2);
         Collections.sort(player3);
         //看牌,将玩家手中的编号,到Map集合中查找,根据键找值
         //定义方法实现
         look("刘德华",player1,pooker);
         look("张曼玉",player2,pooker);
         look("林青霞",player3,pooker);
         look("底牌",bottom,pooker);
     }
     public static void look(String name,ArrayList player,HashMap pooker){
         //遍历ArrayList集合,获取元素,作为键,到集合Map中找值
         System.out.print(name+" ");
         for(Integer key : player){
             String value = pooker.get(key);
             System.out.print(value+" ");
         }
         System.out.println();
     }
 }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67164.html

相关文章

  • Java编程基础19——Map集合&地主案例

    摘要:使用默认随机源对指定列表进行置换。将集合排序使用二分搜索法搜索指定列表,以获得指定对象根据元素的自然顺序,返回给定的最大元素。 1_Map集合概述和特点 A:Map接口概述 查看API可以知道: 将键映射到值的对象 一个映射不能包含重复的键 每个键最多只能映射到一个值 B:Map接口和Collection接口的不同 Map是双列的,Collection是单列的 Map...

    ygyooo 评论0 收藏0
  • map集合的学习

    摘要:提供了专门的集合类用来存放这种对象关系的对象,即接口。中的集合,元素是成对存在的理解为夫妻。中的集合称为单列集合,中的集合称为双列集合。根据指定的键,在集合中获取对应的值。 day04 【Map】 主要内容 Map集合 教学目标 [ ] 能够说出Map集合特点 [ ] 使用Map集合添加方法保存数据 [ ] 使用键找值的方式遍历Map集合 [ ] 使用键值对的方式遍历Map集合 [ ...

    peixn 评论0 收藏0
  • python:面向对象基本知识(二)用类方法实现地主洗牌发牌

    摘要:斗地主牌堆,张牌,四种花色,,大小王洗牌发牌黑桃方片梅花红桃大王小王洗牌发牌展示玩家玩家玩家底牌 斗地主 1.牌堆,54张牌,四种花色,2,3,4,5,6,7,8,9,10,J,Q,K,A,大小王 2.洗牌 3.发牌 import random class Poke(): flowr=[黑桃,方片,梅花,红桃] num=[2,3,4,...

    Yu_Huang 评论0 收藏0
  • Java集合框架——Map接口

    摘要:第三阶段常见对象的学习集合框架集合在实际需求中,我们常常会遇到这样的问题,在诸多的数据中,通过其编号来寻找某一些信息,从而进行查看或者修改,例如通过学号查询学生信息。面试题和的区别是单列集合的顶层接口,有子接口和。 第三阶段 JAVA常见对象的学习 集合框架——Map集合 showImg(https://segmentfault.com/img/remote/1460000019683...

    princekin 评论0 收藏0
  • 基于状态机模型的地主游戏(NodeJs&SocketIO)

    摘要:系统结构系统考虑使用和实现服务器端逻辑,前端使用。逻辑流程主要逻辑包括用户进入游戏等待对家进入游戏游戏过程结束统计这个过程。 1. 系统结构 系统考虑使用Nodejs和SocketIo实现服务器端逻辑,前端使用HTML5。showImg(https://segmentfault.com/img/remote/1460000007643089); 2. 逻辑流程 1 . 主要逻辑包括用户...

    NoraXie 评论0 收藏0

发表评论

0条评论

付伦

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<