集合知识练习
模拟斗地主,洗牌发牌,看牌
import java.util.ArrayList;
import java.util.Collections;
/**
* @author 薛亮亮1006
* @email 18392001342@163.com
* @className Poker
* @description TODO 1.创建牌盒(牌盒:使用"集合"思想 ArrayList)2.存储对应的扑克牌 3.洗牌,使用Collections.shuffle()方法进行打乱顺序4.进行发牌,共有三个玩家,每个玩家可以看成一个ArrayList集合.5.看牌,使用功能进行封装,进行遍历集合
* @date 2020/10/27 21:52
*/
public class Poker {
public static void main(String[] args) {
//创建牌盒
ArrayList<String> arrayList = new ArrayList<String>();
//创建扑克牌,使用数组进行存储
String[] numbers = {"2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A"};
String[] colors = {"♥", "♠", "♣", "♦"};
for (String number : numbers) {
for (String color : colors) {
String name = color.concat(number);
arrayList.add(name);
}
}
//添加大王和小王
arrayList.add("大王");
arrayList.add("小王");
//洗牌
Collections.shuffle(arrayList);
//创建三个玩家
ArrayList<String> player1 = new ArrayList<String>();
ArrayList<String> player2 = new ArrayList<String>();
ArrayList<String> player3 = new ArrayList<String>();
ArrayList<String> diPai = new ArrayList<String>();
//发牌
for (int x = 0; x < arrayList.size(); x++) {
//留出底牌
if (x >= arrayList.size() - 3) {
diPai.add(arrayList.get(x));
} else if (x % 3 == 1) {
player1.add(arrayList.get(x));
} else if (x % 3 == 2) {
player2.add(arrayList.get(x));
} else if (x % 3 == 0) {
player3.add(arrayList.get(x));
}
}
//看牌,单独调用
lookPoker("陈娜", player1);
lookPoker("薛亮亮", player2);
lookPoker("二盼", player3);
lookPoker("底牌是:", diPai);
}
//封装看牌的方法
public static void lookPoker(String name, ArrayList<String> arrayList) {
System.out.println(name + "的牌是:");
for (String array : arrayList) {
System.out.print(array + " ");
}
System.out.println();
}
}
运行结果:
陈娜的牌是:
♥10 ♠J 大王 ♣K ♠5 ♥A ♠Q ♣8 ♥3 ♠3 ♣5 ♥J ♥8 ♥K ♦7 ♥7 ♠A
薛亮亮的牌是:
♣A ♥6 ♠8 ♠4 ♣3 ♦6 ♦K ♥Q ♦9 ♦10 ♥5 ♣6 ♠2 ♦8 ♣9 ♣10 ♥9
二盼的牌是:
♠6 ♦J ♣2 ♦Q 小王 ♦A ♣Q ♥4 ♠7 ♣7 ♠K ♥2 ♦5 ♦3 ♠10 ♦4 ♣4
底牌是:的牌是:
♠9 ♣J ♦2
在经过使用ArrayList集合测试后发现看到的牌并不是排好序的,所以需要使用Map集合进行优化排序!实现如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.TreeSet;
/**
* @author 薛亮亮1006
* @email 18392001342@163.com
* @className PokerDemo
* @description TODO 使用HashMap思想进行实现 1.创建牌盒 2.存储对应的扑克牌 3.洗牌 4.发牌 5.看牌
* @date 2020/10/27 22:29
*/
public class PokerDemo {
public static void main(String[] args) {
//创建牌盒
HashMap<Integer, String> hm = new HashMap<Integer, String>();
ArrayList<Integer> array = new ArrayList<Integer>();
//存储对应的扑克牌
String[] numbers = {"3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2"};
String[] colors = {"♥", "♠", "♣", "♦"};
int index = 0;
for (String number : numbers) {
for (String color : colors) {
String num = color.concat(number);
hm.put(index, num);
array.add(index);
index++;
}
}
//添加大王和小王
hm.put(index, "大王");
array.add(index);
index++;
hm.put(index, "小王");
array.add(index);
//洗牌
Collections.shuffle(array);
//创建三个玩家
TreeSet<Integer> player1 = new TreeSet<Integer>();
TreeSet<Integer> player2 = new TreeSet<Integer>();
TreeSet<Integer> player3 = new TreeSet<Integer>();
TreeSet<Integer> diPai = new TreeSet<>();
//发牌,遍历集合
for(int x = 0;x<array.size();x++){
//留出底牌
if(x>=array.size()-3){
diPai.add(array.get(x));
}else if(x%3==1){
player1.add(array.get(x));
}else if(x%3==2){
player2.add(array.get(x));
}else if(x%3==0){
player3.add(array.get(x));
}
}
//看牌
lookPoker("薛亮亮",player1,hm);
lookPoker("陈娜",player2,hm);
lookPoker("二盼",player3,hm);
lookPoker("底牌",diPai,hm);
}
//对看牌的功能进行封装
public static void lookPoker(String name,TreeSet<Integer> ts,HashMap<Integer,String> hm){
System.out.println(name+"的牌是:");
for(Integer key:ts){
String s=hm.get(key);
System.out.print(s+" ");
}
System.out.println();
}
}
运行结果
薛亮亮的牌是:
♠3 ♣3 ♠4 ♣5 ♥6 ♠6 ♦6 ♦7 ♠8 ♠9 ♣9 ♥10 ♥K ♥A ♦A ♥2 小王
陈娜的牌是:
♦3 ♣4 ♦4 ♠5 ♥7 ♣7 ♥8 ♦8 ♦9 ♠10 ♠J ♥Q ♦Q ♠K ♦K ♦2 大王
二盼的牌是:
♥3 ♥4 ♥5 ♦5 ♣6 ♣8 ♣10 ♦10 ♥J ♣J ♦J ♠Q ♣Q ♣K ♠A ♣A ♠2
底牌的牌是:
♠7 ♥9 ♣2