数据结构 顺序表实现一副扑克牌的洗牌+发牌功能

先写一个扑克牌的类


public class Card {
    public String color;//颜色
    public String Csize;//牌的大小

    public Card(String color, String csize) {
        this.color = color;
        Csize = csize;
    }

    @Override
    public String toString() {
        return "(" + color + Csize +")" ;
    }
}

由于扑克牌具有四种花色,所以我们创造一个String[]数组

static String[] Color={"♥","♠","♣","♦"};

构建一副扑克牌

    private static List BuyPoker(List<Card> list) {
        for(int i=0;i<4;i++){
            for(int j=2;j<=10;j++){//2~10
                Card ca=new Card(Color[i],j+"");
                list.add(ca);
            }
            list.add(new Card(Color[i],"J"));
            list.add(new Card(Color[i],"Q"));
            list.add(new Card(Color[i],"K"));
            list.add(new Card(Color[i],"A"));
        }
        list.add(new Card("","BigGhost"));
        list.add(new Card("","SmallGhost"));
        return list;
    }

因为我们在Card类中重写了toString方法,所以可以直接打印Card的实例
我们将一副扑克牌放在ArrayList顺序表中;

List<Card> list=new ArrayList<>();

洗牌。这里我们可以直接调用Collections中内置的函数,因为List继承与Collections所以有这样的函数

Collections.shuffle(list);

发牌,这里用到了一个盒子中套盒子的方法,现有一个大顺序表,里面的每一个节点里面存的也是一个顺序表,因为ArrayList是泛型类,所以这样写也是可以的,而且更简洁;

  private static void Play(List<Card> list, int n) {
        // 发牌, 假设有三个玩家, 每个玩家, 给发 5 张牌
// 每个玩家手里有 5 张牌, 这 5 张牌就使用另外一个 ArrayList 表示.
//        List<Card> player1 = new ArrayList<>();
//        List<Card> player2 = new ArrayList<>();
//        List<Card> player3 = new ArrayList<>();
        // players 类型仍然是 List, 泛型参数, 是一个 List<Card> , 每个元素就是一个 List<Card>
        List<List<Card>> players = new ArrayList<>();
        // 每次 add 的元素都是一个 ArrayList<Card> 类型
        players.add(new ArrayList<>());
        players.add(new ArrayList<>());
        players.add(new ArrayList<>());
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 5; j++) {
                Card top = list.remove(0);
                List<Card> player = players.get(i);
                player.add(top);
            }
        }
                //  展示手牌
        for (int i = 0; i < players.size(); i++) {
            List<Card> player = players.get(i);
            System.out.println("玩家" + i + " 的手牌是: " + player);
        }
    }

测试用例

    public static void main(String[] args) {
        List<Card> list=new ArrayList<>();
        BuyPoker(list);
        System.out.println(list);
        Collections.shuffle(list);
        int n=3;
        Play(list,n);
    }

运行结果
数据结构  顺序表实现一副扑克牌的洗牌+发牌功能

上一篇:sql语句查询身份证号15位自动转18位


下一篇:Java实验四