简单的洗牌算法

目录

前言

问题

代码展现及分析

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);
    }
}

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

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

相关推荐
weixin_472339462 分钟前
高效处理大体积Excel文件的Java技术方案解析
java·开发语言·excel
小毛驴85030 分钟前
Linux 后台启动java jar 程序 nohup java -jar
java·linux·jar
雾里看山1 小时前
顺序表VS单链表VS带头双向循环链表
数据结构·链表
DKPT1 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
好奇的菜鸟2 小时前
如何在IntelliJ IDEA中设置数据库连接全局共享
java·数据库·intellij-idea
努力的小雨3 小时前
点我!1分钱获取你的专属表白网页,浪漫由大模型代运营
经验分享·ai智能
DuelCode4 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
优创学社24 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
好好研究4 小时前
学习栈和队列的插入和删除操作
数据结构·学习
幽络源小助理4 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring