Java集合练习 发表于 2015-05-07 更新于 2019-10-20 分类于 Java Waline: 斗地主发牌问题1.1使用Java集合的知识,模拟斗地主发牌1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950public class PokerTest { public static void main(String[] args) { // 定义了一个数组,存放扑克牌里面的13张牌大小。 String[] num = { "A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K" }; // 定义了一个一维数组,存放扑克牌里面的花色。 String[] color = { "方片", "梅花", "红桃", "黑桃" }; ArrayList<String> poker = new ArrayList<>(); for (String s1 : color) { for (String s2 : num) { poker.add(s1.concat(" " + s2));//遍历所有牌的花色和大小,除了大小王 } } // 添加大小王 poker.add("小王"); poker.add("大王"); // 洗牌 Collections.shuffle(poker); // 新建4个ArrayList,其中有三个人各17张牌,底牌有3张,共计54张 ArrayList<String> Tom = new ArrayList<>(); ArrayList<String> Jerry = new ArrayList<>(); ArrayList<String> me = new ArrayList<>(); // 底牌 ArrayList<String> lastCards = new ArrayList<>(); //发牌,如果牌数剩余大于3张, for (int i = 0; i < poker.size(); i++) { if (i >= poker.size() - 3) { lastCards.add(poker.get(i)); } else if (i % 3 == 0) { Tom.add(poker.get(i)); } else if (i % 3 == 1) { Jerry.add(poker.get(i)); } else { me.add(poker.get(i)); } } // 看牌 System.out.println("Tom:\n" + Tom); System.out.println("Jerry:\n" + Jerry); System.out.println("me:\n" + me); System.out.println("底牌:\n" + lastCards); }} 运行结果 12345678Tom:[梅花 K, 红桃 J, 黑桃 2, 方片 10, 梅花 4, 红桃 3, 黑桃 Q, 红桃 A, 黑桃 7, 方片 7, 黑桃 5, 梅花 8, 方片 J, 方片 8, 红桃 4, 红桃 7, 黑桃 3]Jerry:[方片 Q, 方片 9, 梅花 6, 梅花 J, 红桃 8, 梅花 3, 黑桃 J, 梅花 2, 黑桃 K, 梅花 A, 红桃 K, 红桃 2, 方片 4, 红桃 10, 黑桃 4, 方片 6, 红桃 5]me:[方片 K, 梅花 5, 黑桃 A, 梅花 9, 红桃 9, 梅花 Q, 黑桃 6, 梅花 10, 黑桃 10, 方片 3, 方片 2, 方片 A, 大王, 小王, 黑桃 8, 方片 5, 梅花 7]底牌:[黑桃 9, 红桃 Q, 红桃 6] 扩展,模拟斗地主发牌,并每个人的牌进行排序。示例代码: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455public class PokerTest1 { public static void main(String[] args) { String[] num = { "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A", "2" }; String[] color = { "方片", "梅花", "红桃", "黑桃" }; HashMap<Integer, String> map = new HashMap<>(); // 存储索引和扑克牌 ArrayList<Integer> list = new ArrayList<>(); // 存储索引 int index = 0; // 索引的开始值 for (String s1 : num) { for (String s2 : color) { map.put(index, s2.concat(" " + s1)); // 将索引和扑克牌添加到HashMap中 list.add(index); // 将索引添加到ArrayList集合中 index++; } } map.put(index, "小王"); list.add(index); index++; map.put(index, "大王"); list.add(index); // 洗牌 Collections.shuffle(list); // 发牌 TreeSet<Integer> Tom = new TreeSet<>(); TreeSet<Integer> Jerry = new TreeSet<>(); TreeSet<Integer> me = new TreeSet<>(); TreeSet<Integer> lastCards = new TreeSet<>(); for (int i = 0; i < list.size(); i++) { if (i >= list.size() - 3) { lastCards.add(list.get(i)); // 将list集合中的索引添加到TreeSet集合中会自动排序 } else if (i % 3 == 0) { Tom.add(list.get(i)); } else if (i % 3 == 1) { Jerry.add(list.get(i)); } else { me.add(list.get(i)); } } // 看牌 lookPoker("Tom", Tom, map); lookPoker("Jerry", Jerry, map); lookPoker("康师傅", me, map); lookPoker("底牌", lastCards, map); } public static void lookPoker(String name, TreeSet<Integer> ts, HashMap<Integer, String> map) { System.out.println(name + "的牌是:"); for (Integer index : ts) { System.out.print(map.get(index) + " "); } System.out.println(); }}