简单的洗牌算法

目录

前言

问题

代码展现及分析

poker类

game类

Text类


前言

洗牌算法为ArrayList具体使用的典例,可以很好的让我们快速熟系ArrayList的用法。如果你对ArrayList还不太了解除,推荐先看本博主的ArrayList的详解。

ArrayList的详解_WHabcwu的博客-CSDN博客


问题

我们需要一副完整的扑克牌,除去大小王一共52张牌,参与游戏的玩家共3名,在洗牌后分发每名玩家5张扑克牌。


代码展现及分析

面向对象思想解决问题主要分为这3步:

  • 找出其中的所有的对象
  • 实现所有的对象
  • 完成对象之间的交互

我们可以想到这几个类:扑克牌,游戏的操作类, 测试类。

poker类

描述扑克牌的属性为花色和数字,我们对其进行封装,再重写 toString方法

java 复制代码
public class poker {
    private String suit;
    private String rank;

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

    public String getSuit() {
        return suit;
    }

    public void setSuit(String suit) {
        this.suit = suit;
    }

    public String getRank() {
        return rank;
    }

    public void setRank(String rank) {
        this.rank = rank;
    }

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

game类

java 复制代码
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class game {
    private static final String[] SUITS={"♥","♠","♣","♦"};
    public List<poker> buypoker(){
        List<poker> pokers=new ArrayList<>();
        for (int i = 0; i < SUITS.length; i++) {
            for (int j = 1; j <=13 ; j++) {
                poker poker = new poker(SUITS[i], j);
                pokers.add(poker);
            }
        }
        return pokers;
    }
   public List<poker> suaffle(List<poker> pokers){
       Random random = new Random();
       for (int i = pokers.size(); i >0; i--) {
           int indx=random.nextInt(i);
           poker tmp=pokers.get(i);
           pokers.set(i,pokers.get(indx));
           pokers.set(indx,tmp);
       }
       return pokers;
   }
 public void grant(List<poker> pokers){
     List<poker> hand1=new ArrayList<>();
     List<poker> hand2=new ArrayList<>();
     List<poker> hand3=new ArrayList<>();
     List<List<poker>> hand=new ArrayList<>();
     hand.add(hand1);
     hand.add(hand2);
     hand.add(hand3);
     for (int i = 0; i < 5; i++) {
         for(int j=0;j<3;j++)
         {
             poker card=pokers.remove(0);
             hand.get(j).add(card);
         }

     }
     System.out.println("第一个人的牌:");
     System.out.println(hand1);
     System.out.println("---------------------------");

     System.out.println("第二个人的牌:");
     System.out.println(hand2);
     System.out.println("---------------------------");

     System.out.println("第三个人的牌:");
     System.out.println(hand3);
     System.out.println("---------------------------");

     System.out.println("剩下的牌");
     System.out.println(pokers);

 }
}
复制代码
buypoker方法的解析:
复制代码
suaffle方法的解析:
复制代码
grant方法的解析:

Text类

java 复制代码
public class Text {
    public static void main(String[] args) {
        game game = new game();
        List<poker> pokers=game.buypoker();
        System.out.println("牌到手了:");
        System.out.println(pokers);
        System.out.println("---------------------------");
        System.out.println("洗牌:");
        pokers=game.suaffle(pokers);
        System.out.println(pokers);
        System.out.println("---------------------------");
        game.grant(pokers);
    }
}

以上为我个人的小分享,如有问题,欢迎讨论!!!

都看到这了,不如关注一下,给个免费的赞

相关推荐
寻星探路4 小时前
【深度长文】万字攻克网络原理:从 HTTP 报文解构到 HTTPS 终极加密逻辑
java·开发语言·网络·python·http·ai·https
曹牧6 小时前
Spring Boot:如何测试Java Controller中的POST请求?
java·开发语言
ValhallaCoder6 小时前
hot100-二叉树I
数据结构·python·算法·二叉树
爬山算法7 小时前
Hibernate(90)如何在故障注入测试中使用Hibernate?
java·后端·hibernate
kfyty7257 小时前
集成 spring-ai 2.x 实践中遇到的一些问题及解决方案
java·人工智能·spring-ai
猫头虎7 小时前
如何排查并解决项目启动时报错Error encountered while processing: java.io.IOException: closed 的问题
java·开发语言·jvm·spring boot·python·开源·maven
李少兄7 小时前
在 IntelliJ IDEA 中修改 Git 远程仓库地址
java·git·intellij-idea
中二病码农不会遇见C++学姐7 小时前
包管理器:从“依赖地狱”到“软件宇宙”的演化史
其他
忆~遂愿8 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能