Java集合练习

斗地主发牌问题

1.1使用Java集合的知识,模拟斗地主发牌

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public 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);
}
}

运行结果

1
2
3
4
5
6
7
8
Tom:
[梅花 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]

扩展,模拟斗地主发牌,并每个人的牌进行排序。

示例代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
public 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();
}
}