Java 扑克牌类实现:创建、比较、随机抽取、排序等功能
Java 扑克牌类实现:创建、比较、随机抽取、排序等功能
本文将使用 Java 创建一个名为 'Pai' 的类来模拟一副扑克牌,并实现以下功能:
- 创建一副完整的牌: 52 张牌,每张牌都有正确的花色和点数。
- 比较价格: 可以与另一副牌比较价格,返回差价。
- 随机抽取: 从一副牌中随机抽取三张牌。
- 获取红桃牌: 返回当前牌中所有的红桃。
- 打乱顺序: 将牌中的扑克顺序打乱。
- 按牌面大小排序: 将当前牌中的扑克按照牌面大小排序。
- 获取指定点数的牌: 接收参数 num,获取当前 Pai 中所有牌面大小是 num 的牌。
1. Pai 类的实现:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Pai {
private int price;
private String cl;
private List<Puke> pks = new ArrayList<>();
public Pai(int price, String cl) {
this.price = price;
this.cl = cl;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getCl() {
return cl;
}
public void setCl(String cl) {
this.cl = cl;
}
public List<Puke> getPks() {
return pks;
}
public void setPks(List<Puke> pks) {
this.pks = pks;
}
public int comparePriceTo(Pai other) {
return this.getPrice() - other.getPrice();
}
public boolean isAll() {
if (pks.size() != 52) {
return false;
}
for (int i = 0; i < pks.size(); i++) {
if (pks.get(i).getNum() != i % 13 + 1 || !pks.get(i).getCl().equals(getCl(i))) {
return false;
}
}
return true;
}
private String getCl(int i) {
if (i < 13) {
return '红桃';
} else if (i < 26) {
return '黑桃';
} else if (i < 39) {
return '梅花';
} else {
return '方块';
}
}
public void createAllPuke() {
for (int i = 1; i <= 13; i++) {
for (int j = 0; j < 4; j++) {
String cl = '';
switch (j) {
case 0:
cl = '红桃';
break;
case 1:
cl = '黑桃';
break;
case 2:
cl = '梅花';
break;
case 3:
cl = '方块';
break;
}
Puke p = new Puke(cl, i);
pks.add(p);
}
}
}
public List<Puke> random3() {
List<Puke> res = new ArrayList<>();
Collections.shuffle(pks);
for (int i = 0; i < 3; i++) {
res.add(pks.get(i));
}
return res;
}
public List<Puke> getHongtaos() {
List<Puke> res = new ArrayList<>();
for (Puke p : pks) {
if (p.getCl().equals('红桃')) {
res.add(p);
}
}
return res;
}
public void shuffle() {
Collections.shuffle(pks);
}
public List<Puke> getPukesByNum(int num) {
List<Puke> res = new ArrayList<>();
for (Puke p : pks) {
if (p.getNum() == num) {
res.add(p);
}
}
return res;
}
public void sortByNum() {
Collections.sort(pks, (p1, p2) -> p1.getNum() - p2.getNum());
}
}
2. 测试类的实现:
public class PaiTest {
public static void main(String[] args) {
Pai pai = new Pai(100, '红桃');
pai.createAllPuke();
System.out.println('是否是一副完整的牌:' + pai.isAll());
Pai other = new Pai(200, '黑桃');
other.createAllPuke();
System.out.println('差价为:' + pai.comparePriceTo(other));
List<Puke> random3 = pai.random3();
System.out.println('随机抽出的3张牌:');
for (Puke p : random3) {
System.out.println(p.getCl() + p.getNum());
}
List<Puke> hongtaos = pai.getHongtaos();
System.out.println('当前牌中所有的红桃:');
for (Puke p : hongtaos) {
System.out.println(p.getCl() + p.getNum());
}
System.out.println('打乱顺序前:');
for (Puke p : pai.getPks()) {
System.out.print(p.getCl() + p.getNum() + ',');
}
pai.shuffle();
System.out.println('
打乱顺序后:');
for (Puke p : pai.getPks()) {
System.out.print(p.getCl() + p.getNum() + ',');
}
List<Puke> pukesByNum = pai.getPukesByNum(10);
System.out.println('
所有牌面大小是10的牌:');
for (Puke p : pukesByNum) {
System.out.println(p.getCl() + p.getNum());
}
pai.sortByNum();
System.out.println('按照牌面大小排序后:');
for (Puke p : pai.getPks()) {
System.out.print(p.getCl() + p.getNum() + ',');
}
}
}
注意:
- 上述代码中的
Puke类需要自行定义,包含花色和点数属性。 - 代码中的输出结果仅供参考,实际运行结果可能会有所不同。
希望本文能帮助您理解如何使用 Java 创建一个扑克牌类,并实现一些常用的功能。
原文地址: https://www.cveoy.top/t/topic/ojVf 著作权归作者所有。请勿转载和采集!