简单的洗牌算法

目录

前言

问题

代码展现及分析

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

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

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

相关推荐
Aphelios38026 分钟前
一次锁内网络IO引发的Tomcat线程池“饿死”事故
java·开发语言·spring boot·elasticsearch·tomcat·网络io阻塞·线程池耗尽
不可求~1 小时前
C++ std::string_view 不是字符串:从悬空引用到安全用法
java·开发语言·c++
Lam Tang1 小时前
APS 系列文章10
java·代理模式
en.en..1 小时前
数据结构考点解析:逻辑闭环与存储循环辨析
数据结构
考虑考虑1 小时前
Excel导入时产生特殊字符处理
java·后端·java ee
Scabbards_2 小时前
面试Leetcode - Heap 堆
java·leetcode·面试
程序员清风2 小时前
专业再升级!程序员专属显示器明基RD280UG上手实测!
java·后端·面试
布莱克6054 小时前
数据库索引分类:数据结构、物理存储与逻辑角度详解
数据结构·数据库
Lam Tang4 小时前
APS 系列文章 08
java·代理模式
Fa_Mian_Tuan4 小时前
图论基础|邻接矩阵超详细讲解(含无向/有向/带权图+完整可运行C语言代码)
c语言·数据结构·笔记·算法·图论