简单的洗牌算法

目录

前言

问题

代码展现及分析

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

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

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

相关推荐
祈安_1 小时前
Java实现循环队列、栈实现队列、队列实现栈
java·数据结构·算法
皮皮林55113 小时前
拒绝写重复代码,试试这套开源的 SpringBoot 组件,效率翻倍~
java·spring boot
顺风尿一寸16 小时前
从 Java NIO poll 到 Linux 内核 poll:一次系统调用的完整旅程
java
程途知微16 小时前
JVM运行时数据区各区域作用与溢出原理
java
华仔啊19 小时前
为啥不用 MP 的 saveOrUpdateBatch?MySQL 一条 SQL 批量增改才是最优解
java·后端
xiaoye201821 小时前
Lettuce连接模型、命令执行、Pipeline 浅析
java
beata1 天前
Java基础-18:Java开发中的常用设计模式:深入解析与实战应用
java·后端
Seven971 天前
剑指offer-81、⼆叉搜索树的最近公共祖先
java
雨中飘荡的记忆2 天前
保证金系统入门到实战
java·后端
Nyarlathotep01132 天前
Java内存模型
java