题目分析
实现一个斗地主发牌,要求先洗牌,然后进行发牌,按照编号大小输出三个人的手牌和底牌
1.定义两个String 集合 分别存储花色和牌
2.组合两个string集合到一个ArrayList集合中
3.使用hashmap<Integer,String>存储一个所有的牌,给每一个牌赋予一个唯一值。
4.定义一个Integer集合存储每一个牌对应的key值。
5.定义四个Integer集合存储每一个人的key值,然后使用hashmap.entry 中的get获取值存储到hashmap中,输出每一个hashmap
public class doudizhu {
public static void main(String[] args) {
HashMap<Integer,String> bobo=xp();
fp(bobo);
}
//定义一个发牌方法
public static void fp(HashMap<Integer,String> pai) {
//定义m存储总的键值对
ArrayList<Integer> m=new ArrayList<>();
//m1,m2,m3,m4 对应三个人和底牌
ArrayList<Integer> m1=new ArrayList<>();
ArrayList<Integer> m2=new ArrayList<>();
ArrayList<Integer> m3=new ArrayList<>();
ArrayList<Integer> m4=new ArrayList<>();
//获取m
Set<Map.Entry<Integer, String>> set= pai.entrySet();
Iterator<Map.Entry<Integer, String>> it = set.iterator();
while (it.hasNext()){
Map.Entry<Integer, String> a=it.next();
m.add(a.getKey());
}
//打乱m
Collections.shuffle(m);
// System.out.println(m);
//获取四个人的对应键值对
for (int i = 0; i < m.size(); i++) {
if(i%3==0){
m1.add(m.get(i));
}
else if (i%3==1){
m2.add(m.get(i));
}
else if(i%3==2){
m3.add(m.get(i));
}
if (i>=51){
m4.add(m.get(i));
}
}
//按照大小排序
Collections.sort(m1);
// System.out.println(m1);
Collections.sort(m2);
// System.out.println(m2);
Collections.sort(m3);
// System.out.println(m3);
Collections.sort(m4);
// System.out.println(m4);
//使用LinkedHashMap存储有序的哈希数组
LinkedHashMap<Integer,String> map1=new LinkedHashMap<>();
LinkedHashMap<Integer,String> map2=new LinkedHashMap<>();
LinkedHashMap<Integer,String> map3=new LinkedHashMap<>();
LinkedHashMap<Integer,String> map4=new LinkedHashMap<>();
//往数组中添加对应的值
for (int j = 0; j < m1.size(); j++) {
map1.put(m1.get(j),pai.get(m1.get(j)));
}
for (int k = 0; k < m2.size(); k++) {
map2.put(m2.get(k),pai.get(m2.get(k)));
}
for (int l = 0; l< m3.size(); l++) {
map3.put(m3.get(l),pai.get(m3.get(l)));
}
for (int n = 0; n < m4.size(); n++) {
map4.put(m4.get(n),pai.get(m4.get(n)));
}
//输出四个人的牌
System.out.println(map1);
System.out.println(map2);
System.out.println(map3);
System.out.println(map4);
}
//定义一个洗牌方法
public static HashMap<Integer,String> xp() {
//定义一个string数组存储花色
String[] hs={"黑桃","红桃","方片","梅花"};
//定义一个数组来存储数字
String[] sz={"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
//定义一个数组来存储组合后的牌
ArrayList<String> pai1=new ArrayList<>();
for (int i = 0; i < hs.length; i++) {
for (int j = 0; j < sz.length; j++) {
String m1=hs[i]+sz[j];
pai1.add(m1);
}
}
//添加大小王
pai1.add("大王");
pai1.add("小王");
// 把牌数组变成哈希数组
HashMap<Integer,String> map1=new HashMap<>();
for (int i = 0; i < pai1.size(); i++) {
map1.put(i,pai1.get(i));
}
return map1;
}
}