java 顺序表典例——扑克牌练习

一、认识顺序表和线性表

线性表是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串…

线性表在逻辑上是一种线性的结构,线性表在物理的存储时,通常以数组和链式结构形式存储在这里插入图片描述
在这里插入图片描述
二、背景介绍
生成一副54张的扑克牌,有三名玩家,会在扑克牌抽取15张牌,再按照顺序依次给三名玩家发牌,每名玩家会拿到5张牌,最终会将抽取到的15张牌,和三名玩家的手牌,打印显示在控制台中。

知识点:循环结构 顺序表 方法

三、解决思路
编写一个card类和一个PokerGame类,给予Card花色和大小的属性,将card存入顺序表中,抽牌之前利用随机数编写函数对牌进行乱序,将三位玩家也作为元素存入链表中,最后通过循环输出三位玩家的手牌。

四、代码解析
1.Card类

package List;

public class Card {
    
    
    public String suit;//花色
    public String rank;//牌面大小

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

    }
    @Override
    public String toString(){
    
    
        return "("+this.suit+this.rank+")";//重载了打印函数
    }
}

2.PokerGame类

package List;

import java.util.*;

public class PokerGame {
    
    
    public static final String[] suits={
    
    "♥","♠","♣","♦"};//创建一个含有四种花色的数组

    private static List<Card> buyPoker(){
    
    
        ArrayList<Card> poker=new ArrayList<>();//新建一个顺序表,表中的内容需要是Card对象
        for(int i=0;i<4;i++){
    
    //外循环对应四种花色
            for(int j=2;j<10;j++){
    
    //内循环对应数字2-8
                poker.add(new Card(suits[i],""+j));
            }
            poker.add(new Card(suits[i],"J"));
            poker.add(new Card(suits[i],"Q"));
            poker.add(new Card(suits[i],"K"));
            poker.add(new Card(suits[i],"A"));//四种特殊的数字
        }
        poker.add(new Card("","big joker"));
        poker.add(new Card("","small joker"));//添加大小王
        return  poker;//返回的是一个顺序表
    }

    private static void shuffle(List<Card> poker)
    {
    
    
        Random random=new Random();
        for(int i=poker.size()-1;i>0;i--)
        {
    
    
            int pos=random.nextInt(i);//生成0-i之间的一个随机数
            swap(poker,i,pos);
        }
    }


    private static void swap(List<Card> poker,int i,int j)
    {
    
    
        Card tmp=poker.get(i);//调取poker中的第i个card赋给temp
        poker.set(i,poker.get(j));
        poker.set(j,tmp);//进行顺序的调换
    }

    public static void main(String[] args){
    
    
        List<Card> poker=buyPoker();//1.创建一副扑克牌
        Collections.shuffle(poker);//2.洗牌
        System.out.println(poker);
        List<List<Card>> players=new ArrayList<>();//新建一个ArrayList,中放置的是,List<Card>
        players.add(new ArrayList<>());
        players.add(new ArrayList<>());
        players.add(new ArrayList<>());//放置三名玩家至新的List中
        for(int i=0;i<5;i++)
        {
    
    
            for(int j=0;j<3;j++)
            {
    
    
                Card top=poker.remove(0);//从牌堆中取牌,也就是取poker中的第一个Card
                List<Card> player=players.get(j);
                player.add(top);

            }

        }
        //4.展示最终拿到的手牌
        for(int i=0;i<players.size();i++)
        {
    
    
            List<Card> player=players.get(i);
            System.out.println("玩家"+i+"的手牌是:"+player);

        }
    }
}

在这里插入图片描述

4.程序中含有的部分方法解释

java Random.nextInt()方法 lic int nextInt(int n)

该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。

元素类型 get(int index);
/**
 * 用新的元素 e 替换 index 位置的元素,并返回 index 位置的原来的元素
 * index 的可选范围是 0 <= index < size()
 * @参数 index 待替换元素的位置(下标)
 * @参数 e 要替换的新元素
 * @返回值 index 位置的老元素
 */
元素类型 set(int index, 元素类型 e);
/**
 * 通过遍历的方式,判断与元素 e 相等(equals)的元素是否存在于线性表中
 * @参数 e 待查找元素
 * @返回 true:包含;false:不包含
 */

5.运行截图
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45742383/article/details/114557615
今日推荐