知识改变命运 数据结构【洗牌算法(顺序表)】

简单的洗牌算法(不包括大小王)

算法思想:

1.如何去表示一张牌呢?这里我们自己创造一个类当作一种新数据类型表示一张牌。

a:这个类里面包括一个String类型的数据和int数据类型的数据分别存储花色和牌号

b:创建一个构造方法对牌号和花色赋值·

c:进行toString重写

java 复制代码
public class Crad {
    private int mark;
    private String suit;
    public Crad() {

    }
    public Crad(String suit,int mark) {
        this.mark = mark;
        this.suit = suit;
    }

    @Override
    public String toString() {
        return "{" + mark + suit + '}'+" ";
    }
}

2.我们先得创造一副牌,考虑四种花色,每张花色的张数为13张

a:创造一个数组里面包含了四种花色

b:利用for循环对花色与牌号结合 然后赋值给牌中

java 复制代码
public static final String []STRING={"♥","♠","♣","♦"};
    public List<Crad> setCrad() {
        List<Crad> crads= new ArrayList<>();
        for (int i = 0; i <STRING.length ; i++) {
            for (int j = 1; j <=13 ; j++) {
                Crad crad=new Crad(STRING[i],j);
                crads.add(crad);
            }
        }
        return crads;
    }

3.对于创建的新牌进行洗牌

a:用到了一个类Random类产生随机下表

b:这里采用牌交换的方式来进行洗牌,采用从最后一张牌开始交换,大致过程举例,51下标的牌然后和Radom类随机生成0到50下标的牌进行交换,然后再50下标的牌和Radom类随机生成0到49下标的牌进行交换,以此类推

java 复制代码
public void shuffle(List<Crad> crads) {
        Random random=new Random();
        for (int i = crads.size()-1; i >0 ; i--) {
             int index=random.nextInt(i);
             Crad temp=crads.get(i);
             crads.set(i,crads.get(index));
             crads.set(index,temp);
        }
    }

4.游戏玩法

a:三名玩家每名玩家依次发5张牌比大小:

java 复制代码
 public  List<List<Crad>> paly(List<Crad> crads) {
        List<List<Crad>> head =new ArrayList<>();
        List<Crad> head1=new ArrayList<>();
        List<Crad> head2=new ArrayList<>();
        List<Crad> head3=new ArrayList<>();
        head.add(head1);
        head.add(head2);
        head.add(head3);
        for (int i = 0; i <5 ; i++) {
            for (int j = 0; j <head.size() ; j++) {
                head.get(j).add(crads.remove(0));
            }

        }
        return head;
    }
}

代码合并

java 复制代码
public class Crad {
    private int mark;
    private String suit;
    public Crad() {

    }
    public Crad(String suit,int mark) {
        this.mark = mark;
        this.suit = suit;
    }

    @Override
    public String toString() {
        return "{" + mark + suit + '}'+" ";
    }
}
public class Game {
    public static final String []STRING={"♥","♠","♣","♦"};
    public List<Crad> setCrad() {
        List<Crad> crads= new ArrayList<>();
        for (int i = 0; i <STRING.length ; i++) {
            for (int j = 1; j <=13 ; j++) {
                Crad crad=new Crad(STRING[i],j);
                crads.add(crad);
            }
        }
        return crads;
    }
//    public void disPalyCards () {
//        List<Crad> list=setCrad();
//        for (int i = 0; i <list.size() ; i++) {
//            System.out.print(list.get(i));
//        }
//    }
    public void shuffle(List<Crad> crads) {
        Random random=new Random();
        for (int i = crads.size()-1; i >0 ; i--) {
             int index=random.nextInt(i);
             Crad temp=crads.get(i);
             crads.set(i,crads.get(index));
             crads.set(index,temp);
        }
    }
    public  List<List<Crad>> paly(List<Crad> crads) {
        List<List<Crad>> head =new ArrayList<>();
        List<Crad> head1=new ArrayList<>();
        List<Crad> head2=new ArrayList<>();
        List<Crad> head3=new ArrayList<>();
        head.add(head1);
        head.add(head2);
        head.add(head3);
        for (int i = 0; i <5 ; i++) {
            for (int j = 0; j <head.size() ; j++) {
                head.get(j).add(crads.remove(0));
            }

        }
        return head;
    }
}
//开始玩游戏
public class Test {
    public static void main(String[] args) {
        Game game = new Game();
        List<Crad> list = game.setCrad();
        System.out.println(list);
        System.out.println();
        game.shuffle(list);
        System.out.println(list);
       List<List<Crad>>game1 =game.paly(list);
        for (int i = 0; i <game1.size(); i++) {
            System.out.println("head"+(i+1)+":"+game1.get(i) );
        }
    }
}
相关推荐
youngerwang39 分钟前
【从搬运工到协处理器:网卡芯片架构、算法、验证与边缘演进深度剖析】
网络·算法·架构·芯片
想要成为糕糕手1 小时前
前端必修课:JavaScript 数组与数据结构底层逻辑全解析
javascript·数据结构·面试
KaMeidebaby1 小时前
卡梅德生物技术快报|纯化重组蛋白实操详解
人工智能·python·tcp/ip·算法·机器学习
caimouse1 小时前
Reactos 第 5 章 进程与线程 — 5.8 Windows 的 APC 机制
c语言·windows
PHP隔壁老王邻居2 小时前
windows菜单搜索栏无法显示历史记录或者无法使用修复方法
windows
手写码匠2 小时前
从零实现 Prompt 工程引擎:结构化提示、自动优化与多轮自省体系
人工智能·深度学习·算法·aigc
道一232 小时前
Windows系统查看端口占用进程的3种实用方法
windows·笔记
半条-咸鱼2 小时前
【INACCESSIBLE_BOOT_DEVICE】安装 Config Tool 后 Windows 蓝屏,最终通过 VMware 虚拟机解决
windows·stm32·vmware·芯片
无限码力2 小时前
阿里算法岗 0530笔试真题 - 多约束条件下的元素匹配统计
算法·阿里笔试真题·阿里机试真题·阿里算法岗笔试
lqqjuly2 小时前
MLA — 多头潜在注意力深度解析
深度学习·神经网络·算法