顺序表的应用之扑克牌和杨辉三角

今天学了顺序表,下面是用所学知识,做出的扑克牌代码和杨慧三角

目录

扑克牌

1.买牌(初始化)

一张牌Card

一副牌cards

2.打乱牌

3.揭牌

4.调用方法测试

5.结果

杨慧三角


扑克牌代码地址​​​​​​​

扑克牌

1.买牌(初始化)

一张牌Card

suit:牌色,rank牌字面大小,一定要有toString,防止输出对象

class Card {
    public String suit;
    public int rank;

    public Card(String suit, int rank) {
        this.suit = suit;
        this.rank = rank;
    }

    @Override
    public String toString() {
        return "Card{" +
                "suit='" + suit + '\'' +
                ", rank=" + rank +
                '}';

    }
}

一副牌cards

这里采用顺序表的存储方式啊ArrayList,初始化52张牌出来(调用Card构造方法),并循环加入add,到cards里面,返回集合cards

  public static final String suits[] = {"♥", "♠", "♣", "♦"};

    //1.买牌
    public List BuyDeskCard() {
        List cards = new ArrayList<>();
        for (int i = 1; i <= 13; i++) {
            for (int j = 0; j < 4; j++) {
                Card card = new Card(suits[j], i);
                cards.add(card);
            }
        }
        return cards;
    }

2.打乱牌

public void shuffle(List cards) {
        Random random = new Random();
        for (int i = cards.size() - 1; i > 0; i--) {
            //产生[0,i)的随机数
            int index = random.nextInt(i);
            swap(cards, i, index);
        }
    }
  public void swap(List cards, int i, int j) {
//        Card tmp=cards[i];
        Card tmp = cards.get(i);
//        cards[i]=cards[j];
        cards.set(i, cards.get(j));
//        cards[j]=tmp;
        cards.set(j, tmp);
    }

由于刚才的牌是依次初始化(买的牌是不是都是新的),这里需要将牌无规则打乱

每次产生(o,i]的随机数index,拿出最后一张牌,取出前i张牌任意一张index,进行交换,注意细节一定要从后往前随机取,理由random每次都是0到i,可能会把前面的也随机了。

3.揭牌

顺序表的应用之扑克牌和杨辉三角_第1张图片

假设三个人,轮流五次, 每个人从洗好的牌,依次抓牌,抓到的牌放到自己的牌堆里hand1,hand2,hand3,再用集合记录三个人的牌堆hands,返回牌堆hands,记录了三个人的抓牌信息

public List> test(List cards) {
        List hand1 = new ArrayList<>();
        List hand2 = new ArrayList<>();
        List hand3 = new ArrayList<>();
        List> hands = new ArrayList<>();
        hands.add(hand1);
        hands.add(hand2);
        hands.add(hand3);
        //发5次牌,每个人轮流拿一张
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                Card card = cards.remove(0);
                hands.get(j).add(card);
            }
        }
        return hands;
    }

4.调用方法测试

package 扑克牌;

import java.util.List;

public class Test {
    public static void main(String[] args) {
        Carddemo carddemo = new Carddemo();
        List ret = carddemo.BuyDeskCard();
        System.out.println(ret);
        System.out.println("洗牌");
        carddemo.shuffle(ret);
        System.out.println(ret);
        System.out.println("揭牌");
        List> ret2 = carddemo.test(ret);
        for (int i = 0; i < ret2.size(); i++) {
            System.out.println("第" + i + "个人的牌:" + ret2.get(i));
        }
        System.out.println("剩余的牌:");
        System.out.println(ret);
    }


}

5.结果

顺序表的应用之扑克牌和杨辉三角_第2张图片

杨慧三角

gitee地址

 public List> generate(int numRows) {
        List> ret = new ArrayList<>();
        List list = new ArrayList<>();
        //添加第一行的数据
        list.add(1);
        ret.add(list);
        for (int i = 1; i < numRows; i++) {
            //开始构造当前行的数据
            List curList = new ArrayList<>();
            curList.add(1);
            //保存上一行的数据
            List preList = ret.get(i - 1);
            for (int j = 1; j < i; j++) {
                //中间的数据(上一行同列和前一列,第一列无法算j从1开始)
               int num=preList.get(j)+preList.get(j-1);
               //构造好数据放回当前列中
               curList.add(num);
            }
            curList.add(1);//末尾来个1
            //把这一行的数据存到ret中
            ret.add(curList);
        }
        return ret;
    }

思路:

顺序表的应用之扑克牌和杨辉三角_第3张图片

 

你可能感兴趣的:(数据结构,java,数据结构)