Java 扑克牌类实现:创建、比较、随机抽取、排序等功能

本文将使用 Java 创建一个名为 'Pai' 的类来模拟一副扑克牌,并实现以下功能:

  1. 创建一副完整的牌: 52 张牌,每张牌都有正确的花色和点数。
  2. 比较价格: 可以与另一副牌比较价格,返回差价。
  3. 随机抽取: 从一副牌中随机抽取三张牌。
  4. 获取红桃牌: 返回当前牌中所有的红桃。
  5. 打乱顺序: 将牌中的扑克顺序打乱。
  6. 按牌面大小排序: 将当前牌中的扑克按照牌面大小排序。
  7. 获取指定点数的牌: 接收参数 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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录