思路: * A:創建一個HashMap集合 * B:創建一個ArrayList集合 * C:創建花色數組和點數數組 * D:從0開始往HashMap裡面存儲編號,並存儲對應的牌 * 同時往ArrayList裡面存儲編號即可。 * E:洗牌(洗的是編號) * F:發牌(發的也是編號,為了保證編號是排序 ...
思路:
* A:創建一個HashMap集合
* B:創建一個ArrayList集合
* C:創建花色數組和點數數組
* D:從0開始往HashMap裡面存儲編號,並存儲對應的牌
* 同時往ArrayList裡面存儲編號即可。
* E:洗牌(洗的是編號)
* F:發牌(發的也是編號,為了保證編號是排序的,就創建TreeSet集合接收)
* G:看牌(遍歷TreeSet集合,獲取編號,到HashMap集合找對應的牌)
輸出牌---無序版
package Day18; import java.util.ArrayList; import java.util.Collections; public class PoKe { public static void main(String[] args) { //創建牌盒---集合 ArrayList<String> array = new ArrayList<String>(); //裝牌 //定義一個花色數組 String [] colors = {"♠","♣","♥","♦"}; //定義一個點數的數組 String [] number = {"A","2","3","4","5","6","7","8","9","J","Q","K"}; //將牌裝入集合array中 //增強for進行迴圈遍歷獲取花色字元數組中的每個花色 for(String a : colors){ //遍歷點數字元數組獲取每個點數 for(String b:number){ //對獲取的每個花色和點數進行字元的拼接---並將其添加到集合array中 //字元拼接使用String類中的public String concat(String str)將指定字元串連接到此字元串的結尾。 array.add(a.concat(b)); } } array.add("小王"); array.add("大王"); //輸出查看字元中的集合---是否添加上元素 //System.out.println(array); // for(String t: array){ // System.out.println(t); // } //洗牌 //使用Collections中任意置換的方法實現其集合元素的混亂 //public static void shuffle(List<?> list)使用預設隨機源對指定列表進行置換。 // 所有置換髮生的可能性都是大致相等的。 Collections.shuffle(array); //輸出查看集合是否混亂 //System.out.println(array); //看牌 //鬥地主三人打牌 //首先創建三個集合用來存儲每個人的牌---還有一個集合存儲最後三張底牌 ArrayList<String> zhao = new ArrayList<String>(); ArrayList<String> zhu = new ArrayList<String>(); ArrayList<String> wang = new ArrayList<String>(); ArrayList<String> dipai = new ArrayList<String>(); //進行分發牌 //首先遍歷array集合 for(int x=0;x<array.size();x++){ //進行底牌的判斷---只留最後三張---放在遍歷迴圈的開始,以防添加到別的集合 if(x>= array.size()-3){ //添加最後三張底牌 dipai.add(array.get(x)); } //進行順序發牌 if(x%3==0){ //三人發牌---這是第一個拿牌的 //如果遍歷的array集合的索引的取餘是零--就將此處array的索引值添加到zhao集合中 zhao.add(array.get(x)); }else if(x%3==1){ //三人發牌--這是第二個拿牌的 zhu.add(array.get(x)); }else if(x%3==2){ //三人發牌--這是第三個拿牌的 wang.add(array.get(x)); } } //查看牌---此時的查看牌定義一個功能方法--查看任意一個調用功能方法即可 kanpai("趙同剛",zhao); kanpai("朱慶娜",zhu); kanpai("王麗麗",wang); kanpai("底牌",dipai); } //兩個明確 //返回值類型----void(任意型) 參數列表--A:給出拿牌人的姓名--B:給出拿牌的集合 public static void kanpai(String name,ArrayList<String> m){ //進行格式的調整 System.out.print(name+":"); //遍歷輸出集合中的每一個元素 for (String e : m){ System.out.print(e+","); } //每個人的牌在輸出時進行換行,以方便查看 System.out.println(); } }
有序版
package Day18; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.TreeSet; /* * 思路: * A:創建一個HashMap集合 * B:創建一個ArrayList集合 * C:創建花色數組和點數數組 * D:從0開始往HashMap裡面存儲編號,並存儲對應的牌 * 同時往ArrayList裡面存儲編號即可。 * E:洗牌(洗的是編號) * F:發牌(發的也是編號,為了保證編號是排序的,就創建TreeSet集合接收) * G:看牌(遍歷TreeSet集合,獲取編號,到HashMap集合找對應的牌) * */ public class PoKe1 { public static void main(String[] args) { //牌盒 //創建一個HashMap集合---存儲編號和對應的牌 HashMap<Integer,String> hm = new HashMap<Integer, String>(); //創建一個ArrayList集合---存儲編號 ArrayList<Integer> Al = new ArrayList<Integer>(); //裝牌 //創建花色字元數組和點數字元數組 String [] color = {"♠","♣","♥","♦"}; String [] number = {"A","2","3","4","5","6","7","8","9","J","Q","K"}; //首先定義一個記錄編號的值 int index = 0; //將花色字元和點數數組進行拼接 //獲取遍歷點數字元數組中的每個字元 for(String nb:number){ //遍歷獲花色數字元數組中的每個點數 for(String cr:color){ //將獲取的花色字元與點數字元進行拼接 //字元拼接使用String類中的public String concat(String str)將指定字元串連接到此字元串的結尾。 String PJ = cr.concat(nb); //--並添加到HashMap集合中----值--牌 hm.put(index,PJ); //同時向ArrayList添加編號 Al.add(index); index++; } } //上述方法做完仍還有大小王沒有添加---進行添加大小王 hm.put(index,"小王"); Al.add(index); index++; hm.put(index,"大王"); Al.add(index); //洗牌--對編號進行洗牌 Collections.shuffle(Al); //看牌 //發牌 //首先創建三個集合用來存儲每個人的牌---還有一個集合存儲最後三張底牌 //創建TreeSet集合進行接受有序排序---發牌發的也是編號--鬥地主三人一個底牌 TreeSet<Integer> FP1 = new TreeSet<Integer>(); TreeSet<Integer> FP2 = new TreeSet<Integer>(); TreeSet<Integer> FP3 = new TreeSet<Integer>(); TreeSet<Integer> FP4 = new TreeSet<Integer>(); //遍歷ArrayList置換後的集合---利用獲取的編號調用ArrayList中get()的方法來獲取集合元素 // --並添加添加到TerrSet集合中 for(int x=0;x<Al.size();x++){ //底牌 //進行底牌的判斷---只留最後三張---放在遍歷迴圈的開始,以防添加到別的集合 if(x>Al.size()-3){ FP4.add(Al.get(x)); //三人發牌---這是第一個拿牌的 }else if(x%3==0){ FP1.add(Al.get(x)); //三人發牌--這是第二個拿牌的 }else if(x%3==1){ FP2.add(Al.get(x)); }else if (x%3==2){ //三人發牌--這是第三個拿牌的 FP3.add(Al.get(x)); } } //已經給玩家發牌完--現在進行看牌 //定義功能方法---方便調用查看每個人的牌 show("趙同剛",FP1,hm); show("朱慶娜",FP2,hm); show("王麗麗",FP3,hm); show("底牌",FP4,hm); } //兩個明確 //參數類型 --void 參數列表 A:傳入玩家的姓名 B:傳入玩家的牌(編號集合) C:對應的牌(牌值集合) public static void show(String name,TreeSet<Integer> FP,HashMap<Integer,String> hm ){ System.out.print(name+":"); //首先遍歷編號集合 for(Integer e :FP){ //利用遍歷的集合編號輸出---對應牌的(牌值集合) String tt = hm.get(e); System.out.print(tt+","); } System.out.println(); } }
標準有序版
public class PokerDemo { public static void main(String[] args) { // 創建一個HashMap集合 HashMap<Integer, String> hm = new HashMap<Integer, String>(); // 創建一個ArrayList集合 ArrayList<Integer> array = new ArrayList<Integer>(); // 創建花色數組和點數數組 // 定義一個花色數組 String[] colors = { "♠", "♥", "♣", "♦" }; // 定義一個點數數組 String[] numbers = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2", }; // 從0開始往HashMap裡面存儲編號,並存儲對應的牌,同時往ArrayList裡面存儲編號即可。 int index = 0; for (String number : numbers) { for (String color : colors) { String poker = color.concat(number); hm.put(index, poker); array.add(index); index++; } } hm.put(index, "小王"); array.add(index); index++; hm.put(index, "大王"); array.add(index); // 洗牌(洗的是編號) Collections.shuffle(array); // 發牌(發的也是編號,為了保證編號是排序的,就創建TreeSet集合接收) TreeSet<Integer> fengQingYang = new TreeSet<Integer>(); TreeSet<Integer> linQingXia = new TreeSet<Integer>(); TreeSet<Integer> liuYi = new TreeSet<Integer>(); TreeSet<Integer> diPai = new TreeSet<Integer>(); for (int x = 0; x < array.size(); x++) { if (x >= array.size() - 3) { diPai.add(array.get(x)); } else if (x % 3 == 0) { fengQingYang.add(array.get(x)); } else if (x % 3 == 1) { linQingXia.add(array.get(x)); } else if (x % 3 == 2) { liuYi.add(array.get(x)); } } // 看牌(遍歷TreeSet集合,獲取編號,到HashMap集合找對應的牌) lookPoker("風清揚", fengQingYang, hm); lookPoker("林青霞", linQingXia, hm); lookPoker("劉意", liuYi, hm); lookPoker("底牌", diPai, hm); } // 寫看牌的功能 public static void lookPoker(String name, TreeSet<Integer> ts, HashMap<Integer, String> hm) { System.out.print(name + "的牌是:"); for (Integer key : ts) { String value = hm.get(key); System.out.print(value + " "); } System.out.println(); } }