题目类别: 实验
关键字: 掌握Java数组、方法的基本定义
内容要求:
- 编写程序,项目名和类名均为PokerGame。
- 实现功能:
(1) 共有m幅扑克牌,每幅扑克牌不包括大王和小王共52张牌。
(2) 可能有n个人参与扑克游戏,2<=n<=52。
(3) 程序运行时输入扑克牌幅数m和人数n,然后所有牌分别依次分发给n个人。不能整除时,每个人的牌数可以不同,如3个人1幅牌,则第1个人18张,第2个和第3个人17张牌。
(4) 发牌完成后按花色(顺序为黑桃、红心、草花、方块)和牌面大小输出每个人得到的牌。
例如:
输入扑克牌幅数:1
输入人数:3
输出如下:
第1个人:
黑桃:K 10 5 A
红心:10 3 2
草花:K 10 8 6 3 A
方块:Q J 5 2
第2个人:
……
第3个人:
……
- 实现要求:
(1) 使用数组存放发牌情况。
(2) 编写不同方法完成不同功能。
备注
提交:打包为可以执行的JAR文档,其中要包含源程序文件。
实现代码:
package PokerGamePakage;
import java.util.*;
public class PokerGame {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("输入扑克牌副数:");
int m = sc.nextInt();
System.out.print("输入人数:");
int n = sc.nextInt();
sc.close();// eclipse下添加此句,以防报错
Random random = new Random();
int[] numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
String[] colours = {" 黑桃:", " 红心:", " 草花:", " 方块:"};
int[] index = new int[m * 52];
for (int i = 0, count = 0; i < m; i++) {
for (int j = 0; j < 52; j++) {
index[count++] = j;
}
}
int j;
// 随机洗牌
for (int i = m * 52 - 1; i >= 0; i--) {
j = random.nextInt(i + 1);
// 交换
index[i] = index[i] + index[j] - (index[j] = index[i]);
}
int k = m * 52 / n;
int f = m * 52 % n;
for (int i = 1, s = 0; i <= n; i++, s++) {
if (s > f) {
s = f;
}
System.out.println("第" + i + "个人:");
for (int l = 0; l < 4; l++) {
System.out.print(colours[l]);
ArrayList<Integer> list = new ArrayList<>();
for (int h = (i - 1) * k + s; h < i * k + (Math.min(s + 1, f)); h++) {
if (index[h] % 4 == l) {
list.add(numbers[index[h] / 4]);
}
}
// 降序排序
list.sort((o1, o2) -> o2 - o1);
for (int w = 0; w < list.size(); w++) {
if (list.get(w) == 1) {
System.out.print("A ");
} else if (list.get(w) == 11) {
System.out.print("J ");
} else if (list.get(w) == 12) {
System.out.print("Q ");
} else if (list.get(w) == 13) {
System.out.print("K ");
} else {
System.out.print(list.get(w) + " ");
}
if (w == list.size() - 1) {
System.out.println();
}
}
}
}
}
}