20_集合_第20天(Map、可變參數、Collections)_講義

来源:https://www.cnblogs.com/wanghui1234/archive/2018/08/31/9563444.html
-Advertisement-
Play Games

今日內容介紹 1、Map介面 2、模擬鬥地主洗牌發牌 01Map集合概述 A:Map集合概述: 我們通過查看Map介面描述,發現Map介面下的集合與Collection介面下的集合,它們存儲數據的形式不同  a:Collection中的集合,元素是孤立存在的(理解為單身),向集合中存儲元素採用一個 ...


今日內容介紹
1、Map介面
2、模擬鬥地主洗牌發牌

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<Integer,String> map = new HashMap<Integer, String>();
        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<Integer,String> map = new HashMap<Integer, String>();
        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<String, Integer> map = new HashMap<String, Integer>();
        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<String,Integer> map = new HashMap<String,Integer>();
        map.put("a", 11);
        map.put("b", 12);
        map.put("c", 13);
        map.put("d", 14);
        
        //1. 調用map集合的方法keySet,所有的鍵存儲到Set集合中
        Set<String> set = map.keySet();
        //2. 遍歷Set集合,獲取出Set集合中的所有元素 (Map中的鍵)
        Iterator<String> 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<K,V> implements Map.Entry<K,V> {//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<Entry <K,V> >
 *    2. 迭代Set集合
 *    3. 獲取出的Set集合的元素,是映射關係對象
 *    4. 通過映射關係對象方法 getKet, getValue獲取鍵值對
 *    
 *    創建內部類對象 外部類.內部類 = new 
 */
public class MapDemo2 {
    public static void main(String[] args) {
        Map<Integer,String> map = new HashMap<Integer, String>();
        map.put(1, "abc");
        map.put(2, "bcd");
        map.put(3, "cde");
        //1. 調用map集合方法entrySet()將集合中的映射關係對象,存儲到Set集合
        Set<Map.Entry <Integer,String> >  set = map.entrySet();
        //2. 迭代Set集合
        Iterator<Map.Entry <Integer,String> > it = set.iterator();
        while(it.hasNext()){
            //  3. 獲取出的Set集合的元素,是映射關係對象
            // it.next 獲取的是什麼對象,也是Map.Entry對象
            Map.Entry<Integer, String> 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<Entry <K,V> >
   *    2. 迭代Set集合
   *    3. 獲取出的Set集合的元素,是映射關係對象
   *    4. 通過映射關係對象方法 getKet, getValue獲取鍵值對
   *    
   *    創建內部類對象 外部類.內部類 = new 
   */
  public class MapDemo2 {
    public static void main(String[] args) {
        Map<Integer,String> map = new HashMap<Integer, String>();
        map.put(1, "abc");
        map.put(2, "bcd");
        map.put(3, "cde");
        //1. 調用map集合方法entrySet()將集合中的映射關係對象,存儲到Set集合
        Set<Map.Entry <Integer,String> >  set = map.entrySet();
        //2. 迭代Set集合
        Iterator<Map.Entry <Integer,String> > it = set.iterator();
        while(it.hasNext()){
            //  3. 獲取出的Set集合的元素,是映射關係對象
            // it.next 獲取的是什麼對象,也是Map.Entry對象
            Map.Entry<Integer, String> 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<Integer, String> 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<Person, String> map = new HashMap<Person, String>();
        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<Person, String> entry : map.entrySet()){
            System.out.println(entry.getKey()+"..."+entry.getValue());
        }
    }
    
    /*
     * HashMap 存儲自定義的對象Person,作為值出現
     * 鍵的對象,是字元串,可以保證唯一性
     */
    public static void function(){
        HashMap<String, Person> map = new HashMap<String, Person>();
        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<String, Person> 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<String, String> link = new LinkedHashMap<String, String>();
        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<String,String> map = new Hashtable<String,String>();
        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<Integer> list = new ArrayList<Integer>();
        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<Integer> list = new ArrayList<Integer>();
        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<String> list = new ArrayList<String>();
        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<String, String> javase = new HashMap<String, String>();
        //定義就業班集合
        HashMap<String, String> javaee = new HashMap<String, String>();
        //向班級集合中,存儲學生信息
        javase.put("001", "張三");
        javase.put("002", "李四");
        
        javaee.put("001", "王五");
        javaee.put("002", "趙六");
        //定義傳智播客集合容器,鍵是班級名字,值是兩個班級容器
        HashMap<String, HashMap<String,String>> czbk =
                new HashMap<String, HashMap<String,String>>();
        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<String, String> javase = new HashMap<String, String>();
        //定義就業班集合
        HashMap<String, String> javaee = new HashMap<String, String>();
        //向班級集合中,存儲學生信息
        javase.put("001", "張三");
        javase.put("002", "李四");
        
        javaee.put("001", "王五");
        javaee.put("002", "趙六");
        //定義傳智播客集合容器,鍵是班級名字,值是兩個班級容器
        HashMap<String, HashMap<String,String>> czbk =
                new HashMap<String, HashMap<String,String>>();
        czbk.put("基礎班", javase);
        czbk.put("就業班", javaee);
        
         keySet(czbk);
         
    }
    
     
    
    public static void keySet(HashMap<String,HashMap<String,String>> czbk){
        //調用czbk集合方法keySet將鍵存儲到Set集合
        Set<String> classNameSet = czbk.keySet();
        //迭代Set集合
        Iterator<String> classNameIt = classNameSet.iterator();
        while(classNameIt.hasNext()){
            //classNameIt.next獲取出來的是Set集合元素,czbk集合的鍵
            String classNameKey = classNameIt.next();
            //czbk集合的方法get獲取值,值是一個HashMap集合
            HashMap<String,String> classMap = czbk.get(classNameKey);
            //調用classMap集合方法keySet,鍵存儲到Set集合
            Set<String> studentNum = classMap.keySet();
            Iterator<String> 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<String, String> 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<String, String> javase = new HashMap<String, String>();
        //定義就業班集合
        HashMap<String, String> javaee = new HashMap<String, String>();
        //向班級集合中,存儲學生信息
        javase.put("001", "張三");
        javase.put("002", "李四");
        
        javaee.put("001", "王五");
        javaee.put("002", "趙六");
        //定義傳智播客集合容器,鍵是班級名字,值是兩個班級容器
        HashMap<String, HashMap<String,String>> czbk =
                new HashMap<String, HashMap<String,String>>();
        czbk.put("基礎班", javase);
        czbk.put("就業班", javaee);
        
        entrySet(czbk);
    }
    
    public static void entrySet(HashMap<String,HashMap<String,String>> czbk){
        //調用czbk集合方法entrySet方法,將czbk集合的鍵值對關係對象,存儲到Set集合
        Set<Map.Entry<String, HashMap<String,String>>> 
                                 classNameSet = czbk.entrySet();
        //迭代器迭代Set集合
        Iterator<Map.Entry<String, HashMap<String,String>>> classNameIt = classNameSet.iterator();
        while(classNameIt.hasNext()){
            //classNameIt.next方法,取出的是czbk集合的鍵值對關係對象
            Map.Entry<String, HashMap<String,String>> classNameEntry =  classNameIt.next();
            //classNameEntry方法 getKey,getValue
            String classNameKey = classNameEntry.getKey();
            //獲取值,值是一個Map集合
            HashMap<String,String> classMap = classNameEntry.getValue();
            //調用班級集合classMap方法entrySet,鍵值對關係對象存儲Set集合
            Set<Map.Entry<String, String>> studentSet = classMap.entrySet();
            //迭代Set集合
            Iterator<Map.Entry<String, String>> studentIt = studentSet.iterator();
            while(studentIt.hasNext()){
                //studentIt方法next獲取出的是班級集合的鍵值對關係對象
                Map.Entry<String, String> 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<String, HashMap<String, String>> me : czbk.entrySet()) {
            String classNameKey = me.getKey();
            HashMap<String, String> numNameMapValue = me.getValue();
            for (Map.Entry<String, String> 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<String>,將最後3張牌直接存放於底牌,剩餘牌通過對3取模依次發牌。
       存放的過程中要求數字大小與鬥地主規則的大小對應。
       將代表不同紙牌的數字分配給不同的玩家與底牌。
      4.看牌:
       通過Map集合找到對應字元展示。
       通過查詢紙牌與數字的對應關係,由數字轉成紙牌字元串再進行展示。

18鬥地主的準備牌

A:鬥地主的準備牌

 /*
  *  實現模擬鬥地主的功能
  *   1. 組合牌
  *   2. 洗牌
  *   3. 發牌
  *   4. 看牌
  */
 public class DouDiZhu {
    public static void main(String[] args) {
        //1. 組合牌
        //創建Map集合,鍵是編號,值是牌
        HashMap<Integer,String> pooker = new HashMap<Integer, String>();
        //創建List集合,存儲編號
        ArrayList<Integer> pookerNumber = new ArrayList<Integer>();
        //定義出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<Integer,String> pooker = new HashMap<Integer, String>();
        //創建List集合,存儲編號
        ArrayList<Integer> pookerNumber = new ArrayList<Integer>();
        //定義出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<Integer,String> pooker = new HashMap<Integer, String>();
        //創建List集合,存儲編號
        ArrayList<Integer> pookerNumber = new ArrayList<Integer>();
        //定義出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<Integer> player1 = new ArrayList<Integer>();
        ArrayList<Integer> player2 = new ArrayList<Integer>();
        ArrayList<Integer> player3 = new ArrayList<Integer>();
        ArrayList<Integer> bottom = new ArrayList<Integer>();
        
        //發牌採用的是集合索引%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<Integer,String> pooker = new HashMap<Integer, String>();
        //創建List集合,存儲編號
        ArrayList<Integer> pookerNumber = new ArrayList<Integer>();
        //定義出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<Integer> player1 = new ArrayList<Integer>();
        ArrayList<Integer> player2 = new ArrayList<Integer>();
        ArrayList<Integer> player3 = new ArrayList<Integer>();
        ArrayList<Integer> bottom = new ArrayList<Integer>();
        
        //發牌採用的是集合索引%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<Integer> player,HashMap<Integer,String> pooker){
        //遍歷ArrayList集合,獲取元素,作為鍵,到集合Map中找值
        System.out.print(name+" ");
        for(Integer key : player){
            String value = pooker.get(key);
            System.out.print(value+" ");
        }
        System.out.println();
    }
 }

作業測試

1.分析以下需求,並用代碼實現:

(1)定義一個學生類Student,包含屬性:姓名(String name)、年齡(int age)
(2)定義Map集合,用Student對象作為key,用字元串(此表示表示學生的住址)作為value
(3)利用四種方式遍歷Map集合中的內容,格式:key::value
     

2.分析以下需求,並用代碼實現:

(1)利用鍵盤錄入,輸入一個字元串
(2)統計該字元串中各個字元的數量
(3)如:

    用戶輸入字元串"If~you-want~to~change-your_fate_I_think~you~must~come-to-the-dark-horse-to-learn-java"
    程式輸出結果:-(9)I(2)_(3)a(7)c(2)d(1)e(6)f(2)g(1)h(4)i(1)j(1)k(2)l(1)m(2)n(4)o(8)r(4)s(2)t(8)u(4)v(1)w(1)y(3)~(6)

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 mui是一款接近原生App體驗的前端框架,只需要掌握前端技術就可以開發APP應用,官方有提供功能比較全面的demo版本, 但在實戰中總會遇到一些不可避免但坑,對於沒有接觸過mui的開發者,難免會浪費很多時間在踩坑上。 該項目以mui為開發框架,artTemplate.js作為js模版引擎,沒有 ...
  • 官網 http://www.fhadmin.org/ 系統介紹: 1.網站後臺採用主流的 SSM 框架 jsp JSTL,網站後臺採用freemaker靜態化模版引擎生成html 2.因為是生成的html,所以訪問速度快,輕便,對伺服器負擔小 3.網站前端採用主流的響應式佈局,同一頁面同時支持PC、 ...
  • 絕對和你在網上看到的CAP定理介紹不一樣。 CAP 定理(CAP theorem)又被稱作布魯爾定理(Brewer's theorem),是加州大學伯克利分校的電腦科學家埃里克·布魯爾(Eric Brewer)在 2000 年的 ACM PODC 上提出的一個猜想。2002 年,麻省理工學院的賽斯 ...
  • 1 獲得所有公共的構造方法 2 獲得所有的構造方法 3 獲得公有 無參的構造方法 4 獲得公有 有參的構造方法 5 獲得私有 有參的構造方法 6 獲得所有公共的方法 7 獲得所有方法 8 獲取公有 無參方法 9 獲取公有 有參方法 10 獲取私有 有參方法 11 獲取所有屬性 12 獲得屬性值 ...
  • 題意 給出$n$個數,每次詢問區間$(l, r)$內最大欄位和 Sol 在合併子樹的時候,答案僅有四種情況 打四個標記維護即可 查詢同理,用類似update的方式合併 註意查詢的時候不能按照以前的方式寫,因為不知道變數的下界,最穩妥的辦法就是判三種情況 ...
  • 本文為作者搜集的Spring關於IoC/DI相關知識的記錄整理筆記。介紹了IoC(控制反轉)是一種設計原則,用於降低代碼的耦合度。介紹了IoC是通過BeanDefinition來定義Bean對象及其關係,用BeanFactory來管理Bean的生命周期。 ...
  • fastjson這一工具包幫助我們進行java對象和json格式的字元串之間的相互轉換。對象到字元串的過程,我們稱之為序列化;反之,我們稱為反序列化。 現在我們就來談談fastjson提供的反序列化方法,本篇只討論按照指定的位元組碼返回相應對象的的反序列化方法,該方法有多種重載形式,按照重疊構造的模式 ...
  • VB6畢竟是很老的產品了,它的代碼編輯器垂直滾動條並不能隨滑鼠的滾輪而滾動,這個問題會讓我們在編寫代碼的時候覺得很不方便,不過還是有一種方法可以解決這個問題的。 先下載一個微軟發佈的“VB6IDEMouseWheelAddin.dll”文件(此文件已經上傳到百度網盤,網址:http://pan.ba ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...