import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
public class PokerCard {
public static void main(String[] args) {
//1.准备牌
//创建一个Map集合,存储扑克牌的索引和组装好的扑克牌
HashMap<Integer, String> map = new HashMap<>();
//创建一个List集合来存储扑克牌的索引,方便之后对扑克牌进行洗牌操作(操作索引)
ArrayList<Integer> pokerIndex = new ArrayList<>();
//定义两个List集合,用来存储扑克牌的而花色和序号
List<String> kind = List.of("?", "?", "?", "?");
List<String> number = List.of("3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2");
//把大王和小王存储到集合中
//初始化索引为0
int index = 0;
map.put(index,"大王");
pokerIndex.add(index);
index++;
map.put(index,"小王");
pokerIndex.add(index);
index++;
//组装两个集合的数据,生成带花色的52张牌(可以用普通for循环,也可以用增强for循环foreach)
for (String num : number) {
for (String k : kind) {
map.put(index,k+num);
pokerIndex.add(index);
index++;
}
}
// System.out.println(map);//打印扑克牌集合
//2.洗牌
Collections.shuffle(pokerIndex);
System.out.println(pokerIndex);
//发牌
//定义4个集合,分别存储3个玩家的牌和3张底牌
ArrayList<Integer> player1 = new ArrayList<>();
ArrayList<Integer> player2 = new ArrayList<>();
ArrayList<Integer> player3 = new ArrayList<>();
ArrayList<Integer> bottoms = new ArrayList<>();
//遍历存放扑克牌索引的list集合,获取每一张牌的索引
for (int i = 0; i < pokerIndex.size(); i++) {
Integer integer = pokerIndex.get(i);
if (i>=51){
//发牌给底牌
bottoms.add(integer);
}else if (i%3==0){
//发牌给玩家1
player1.add(integer);
}
else if (i%3==1){
//发牌给玩家1
player2.add(integer);
}
else if (i%3==2){
//发牌给玩家1
player3.add(integer);
}
}
//4.排序
Collections.sort(player1);
Collections.sort(player2);
Collections.sort(player3);
Collections.sort(bottoms);//默认升序排序
//5.看牌
seePoker("player1",map,player1);
seePoker("player2",map,player2);
seePoker("player3",map,player3);
seePoker("bottoms",map,bottoms);
System.out.println("---------------");
lookPoker("player1",map,player1);
lookPoker("player2",map,player2);
lookPoker("player3",map,player3);
lookPoker("bottoms",map,bottoms);
}
//在主函数外定义一个方法用来看牌,提高代码的复用性
/*
* 参数:
* String name;玩家名称
* HashMap<Integer, String> map 存储扑克牌的集合
* ArrayList<Integer> list 存储玩家牌和底牌的list集合
*查表法:
* 遍历玩家牌或底牌集合,获取扑克牌索引
* 使用索引区装所有扑克牌的map集合中找到对应的扑克牌
*
* */
public static void seePoker(String name,HashMap<Integer,String> pokerMap,ArrayList<Integer> list){
//输出玩家名称,不换行
System.out.print(name+":");
//遍历传入该方法的扑克牌索引集合,即分别存储3个玩家的牌和3张底牌List集合,获取扑克牌索引
for (Integer key : list) {
//使用索引区装所有扑克牌的map集合中找到对应的扑克牌
String value = pokerMap.get(key);
System.out.print(value+" ");
}
System.out.println();//换行
}
//或者定义一个方法,打印玩家的牌和底牌的集合
public static void lookPoker(String name,HashMap<Integer,String> pokerMap,ArrayList<Integer> list){
//输出玩家名称,不换行
System.out.print(name+":");
ArrayList<String> arrayList = new ArrayList<>();
//遍历传入该方法的扑克牌索引集合,即分别存储3个玩家的牌和3张底牌List集合,获取扑克牌索引
for (Integer key : list) {
//使用索引区装所有扑克牌的map集合中找到对应的扑克牌
String value = pokerMap.get(key);
arrayList.add(value);
}
System.out.println(arrayList);
}
}
运行结果:
Java集合的综合案例之——斗地主的“洗牌”与“发牌”并“排序”
原文:https://www.cnblogs.com/niuniu-/p/14709345.html