java--Map使用實現模擬鬥地主洗牌發牌

1、Map相關知識總結java

1:Map集合,元素是成對出現的<key,value>,包括HashMap集合、LinkedHashMap集合。學習

HashMap<K,V>:存儲數據採用的哈希表結構,元素的存取順序不能保證一致。this

LinkedHashMap<K,V>HashMap下有個子類LinkedHashMap,存儲數據採用的哈希表結構+鏈表結構。spa

 2.經常使用的接口設計

3. Map集合遍歷鍵找值方式blog

(1)經過鍵找值排序

                Map<String,String> map=new HashMap<String,String>();
		
		map.put("星期一", "Monday");
		map.put("星期日", "Sunday");
		map.put("星期二", "Tuesday");
		
		Set<String> keySet=map.keySet();
		
		Iterator<String> it=keySet.iterator();
		while(it.hasNext()){
			String key=it.next();
			String value=map.get(key);
			System.out.println(value);
		}

(2)經過鍵值對接口

                Set<Map.Entry<String,String>> entrySet = map.entrySet();
		Iterator<Map.Entry<String,String>> it=entrySet.iterator();
		while(it.hasNext()){
			Map.Entry<String,String> key=it.next();
			String value=key.getValue();
			System.out.println(value);
		}

 2、模擬鬥地主洗牌發牌字符串

一、分析:首先應準備牌:完成數字與紙牌的映射關係:使用雙列Map(HashMap)集合,完成一個數字與字符串紙牌的對應關係。get

               洗牌:經過數字完成洗牌發牌

               發牌:將每一個人以及底牌設計爲ArrayList<String>,將最後3張牌直接存放於底牌,剩餘牌經過對3取模依次發牌。存放的過程當中要求數字大小與鬥地主規則的大小對應。將表明不一樣紙牌的數字分配給不一樣的玩家與底牌。

              看牌:經過Map集合找到對應字符展現。經過查詢紙牌與數字的對應關係,由數字轉成紙牌字符串再進行展現。

2.具體實現代碼:

package com.example;

import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

public class Poker {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
        /*
         * 準備花色,準備數字,map<牌的編號(共54張),牌(花色+數字)>
         * */
		//1.花色
		ArrayList<String>color = new ArrayList<String>();
		color.add("♠");
		color.add("♥");
		color.add("♦");
		color.add("♣");
        
		//數字
		ArrayList<String>number = new ArrayList<String>();
		Collections.addAll(number,"3","4","5","6","7","8","9","10","J","Q","K","A","2");

		//定義一個map集合:用來將數字與每一張牌進行對應
		HashMap<Integer, String>map = new HashMap<Integer, String>();
		int index=0;
		for (String thisNumber : number) {
			for (String thisColor : color) {
				map.put(index++, thisColor+thisNumber);
			}
		}
		//加入大小王
		map.put(index++, "小王");
		map.put(index++, "大王");

                ArrayList<Integer>cards = new ArrayList<Integer>();
		
		for (int i = 0; i<= 53; i++) {
			cards.add(i);
		}
		//洗牌
		Collections.shuffle(cards);

		//建立三個玩家和底牌
		ArrayList<Integer>iPlayer1 = new ArrayList<Integer>();
		ArrayList<Integer>iPlayer2 = new ArrayList<Integer>();
		ArrayList<Integer>iPlayer3 = new ArrayList<Integer>();
		ArrayList<Integer>itCards = new ArrayList<Integer>();

		//發牌
		for(int i=0;i<cards.size();i++){
			if(i>=51){
				itCards.add(cards.get(i));
			}else{
				if(i%3==0){
					iPlayer1.add(cards.get(i));
				}
				else if(i%3==1){
					iPlayer2.add(cards.get(i));
				}
				else{
					iPlayer3.add(cards.get(i));
				}
			}
		}
		
		//對每人手中的牌排序
		Collections.sort(iPlayer1);
		Collections.sort(iPlayer2);
		Collections.sort(iPlayer3);
		Collections.sort(itCards);
		
		//
		ArrayList<String>sPlayer1 = new ArrayList<String>();
		ArrayList<String>sPlayer2 = new ArrayList<String>();
		ArrayList<String>sPlayer3 = new ArrayList<String>();
		ArrayList<String>sCards = new ArrayList<String>();
		
		for(Integer key : iPlayer1){
			sPlayer1.add(map.get(key));
		}
		for(Integer key : iPlayer2){
			sPlayer2.add(map.get(key));
		}
		for(Integer key : iPlayer3){
			sPlayer3.add(map.get(key));
		}
		for(Integer key : itCards){
			sCards.add(map.get(key));
		}

		System.out.println("第一位:"+sPlayer1);
		System.out.println("第二位:"+sPlayer2);
		System.out.println("第三位:"+sPlayer3);
		System.out.println("底牌:"+sCards);

		
		
	}

}

原來學過java,如今對其中一些知識進一步總結和學習,但願能更好的使用。

相關文章
相關標籤/搜索