IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 扑克牌练习 【数据结构】 -> 正文阅读

[数据结构与算法]扑克牌练习 【数据结构】

前言: 之前学了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 中的元素 随即打乱顺序
使用默认随机源对列表进行置换,所有置换发生的可能性都是大致相等的

输出示例:

在这里插入图片描述

在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-29 10:33:19  更:2021-09-29 10:33:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/17 14:37:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码