资讯专栏INFORMATION COLUMN

扑克牌练习 【数据结构】

Labradors / 2899人阅读

摘要:前言之前学了常用的方法,下面就是用来完成扑克牌练习通过扑克牌这个练习,进一步来掌握的一些用法炸金花练习目录思路代码实现创建一张牌类创建一副牌主类代码输出示例思路在我们动手写代码之前,我们需要思考扑克牌应该有什么联想到我们平

前言: 之前学了List常用的方法,下面就是用List来完成扑克牌练习~
通过扑克牌这个练习,进一步来掌握 List 的一些用法!


思路

在我们动手写代码之前,我们需要思考扑克牌应该有什么?联想到我们平时玩扑克牌

  • 一张牌:有花色和点数两个属性,那么我们可以创建一个类Card,来表示一张牌
  • 一副牌:一张牌是一个 Card,那么一些牌放在一起就组成了一副牌,就可以创建一个 List< Card > ,返回结果是若干个 Card 放在一起,得到了一个 List
  • 花色和点数:使用 双for 循环处理花色和点数,第一层循环表示四种花色,第二层循环表示[2,10]点数的牌,将JQKA多带带设置

代码实现:

创建一张牌—Card类

class Card{    private String point; //点数    private String suit;  //花色    //提供构造方法    public Card(String point, String suit) {        this.point = point;        this.suit = suit;    }    // get set 方法    public String getPoint() {        return point;    }    public void setPoint(String point) {        this.point = point;    }    public String getSuit() {        return suit;    }    public void setSuit(String suit) {        this.suit = suit;    }    @Override    public String toString() {        return "[" + this.point + this.suit + "]";    }}

创建一副牌

private static List<Card> buyPoker(){	List<Card> poker = new ArrayList<>();		String[] suits = {"♥","♠","♣","♦"};	//处理四种花色	for (int i = 0; i < 4; i++) {		//每种花色有 13张 牌		for (int k = 2; k <= 10; k++) {			//k 表示点数, int → String			poker.add(new Card(String.valueOf(k),suits[i]));}	// 多带带处理 J Q K A	poker.add(new Card("J",suits[i]));	poker.add(new Card("Q",suits[i]));	poker.add(new Card("K",suits[i]));	poker.add(new Card("A",suits[i]));}

valueOf方法:
原型:
public static String valueOf(int i) {
return Integer.toString(i);
}
.
即:将 int 转换成 String

主类代码:

public static void main(String[] args) {    //1.创建一副牌    List<Card> poker = buyPoker();    //2.洗牌    Collections.shuffle(poker);        //3.发牌    //假设有三个玩家    //每个玩家就是 1 个 List,可把每个人的手牌放到List中,可把多个玩家再放到一个List中    //即 players表示所有玩家的手牌信息    List<List<Card>> players = new ArrayList<>();    // 而每个List又表示一个玩家的手牌信息    players.add(new ArrayList<Card>());    players.add(new ArrayList<Card>());    players.add(new ArrayList<Card>());    //开始发牌    for (int i = 0; i < 3; i++) {        for (int k = 0; k < 3; k++) {            List<Card> player =  players.get(k);            player.add(poker.remove(0));        }    }    //发牌结束,可查看手牌    for (int i = 0; i < 3; i++) {        System.out.println("玩家" + i + players.get(i));    }}

shuffle方法:
.
方法原型:

public static void shuffle(List<?> list) {	Random rnd = r;	if (rnd == null)		r = rnd = new Random(); // harmless race.	shuffle(list, rnd);}.private static Random r;

把 List 中的元素 随即打乱顺序
使用默认随机源对列表进行置换,所有置换发生的可能性都是大致相等的

输出示例:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121374.html

相关文章

  • map集合的学习

    摘要:提供了专门的集合类用来存放这种对象关系的对象,即接口。中的集合,元素是成对存在的理解为夫妻。中的集合称为单列集合,中的集合称为双列集合。根据指定的键,在集合中获取对应的值。 day04 【Map】 主要内容 Map集合 教学目标 [ ] 能够说出Map集合特点 [ ] 使用Map集合添加方法保存数据 [ ] 使用键找值的方式遍历Map集合 [ ] 使用键值对的方式遍历Map集合 [ ...

    peixn 评论0 收藏0
  • CSS之2D转换模块

    摘要:转换模块参考手册属性向元素应用从或转换。该属性允许我们对元素进行旋转缩放移动或者倾斜。不设置透视注意属性只能影响转换元素综合实例一模块转换扑克练习模块转换扑克练习综合实例二相片墙转换模块照片墙转换模块照片墙CSS 2D转换模块 transform 参考W3手册 transform 属性向元素应用从2D 或3D转换。该属性允许我们对元素进行旋转、缩放、移动或者倾斜。 格式: transfo...

    andot 评论0 收藏0
  • 深度学习的下一个热点——GANs将改变世界

    摘要:生成式对抗网络简称将成为深度学习的下一个热点,它将改变我们认知世界的方式。配图针对三年级学生的对抗式训练属于你的最严厉的批评家五年前,我在哥伦比亚大学举行的一场橄榄球比赛中伤到了自己的头部,导致我右半身腰部以上瘫痪。 本文作者 Nikolai Yakovenko 毕业于哥伦比亚大学,目前是 Google 的工程师,致力于构建人工智能系统,专注于语言处理、文本分类、解析与生成。生成式对抗网络—...

    ningwang 评论0 收藏0
  • 数据结构与算法】—— * 深度优先搜索入门 *

    摘要:问题引入输入一个数,输出的全排列问题解析假设有编号为的张扑克牌和编号为的个盒子。至于下一步该如何做,则与当下该如何做是一样的。基本模型判断边界尝试每一种可能继续下一步的尝试返回每一种尝试就是一种扩展。 问题引入 输入一个数n,输出1~n的全排列 问题解析 假设有编号为1,2,...

    hikui 评论0 收藏0
  • 40张图看懂扑克AI对抗人类30年历史,解密冷扑大师前世今生

    摘要:月,卡耐基梅隆大学的程序在一对一不限注的扑克比赛中,击败了一组的德州扑克职业选手。概述击败人类冠军的三件事的深蓝,由卡内基梅隆大学开饭,在年的复赛中击败国际象棋世界冠军卡斯帕罗夫。年,奥克兰大学发布。 2017年是AI在扑克上取得突破的一年,在AI的发展历史上,具有里程碑的意义。1月,卡耐基梅隆大学的 AI 程序在一对一不限注的扑克比赛中,击败了一组的德州扑克职业选手。出乎所有人的意外,这一...

    YuboonaZhang 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<