Java练习——扑克牌发牌器
Java练习——扑克牌发牌器
声明:学习自其他博主,感谢分享,这里自己也写了一下。
实现思路
- - 构建一张扑克牌
- - 构建一套扑克牌
- - 测试
构建一张扑克牌
/**
* @author 冬冬
* 定义一个单张扑克牌类
* 有花型,大小
*/
public class Card { private String flower; // 花型
private int daxiao; // 点数 /**构造方法
* @param flower
* @param daxiao
*/
public Card(String flower, int daxiao) {
this.flower = flower;
this.daxiao = daxiao;
}
/* (non-Javadoc)
* @see java.lang.Object#toString()
* 获取本张卡牌的花型与大小,对于特殊的大小,如1——A,输出时进行转换
*/
public String toString() {
String daxiaoStr = "";
switch(daxiao) {
case 1: daxiaoStr = "A"; break;
case 11: daxiaoStr = "J"; break;
case 12: daxiaoStr = "Q"; break;
case 13: daxiaoStr = "K"; break;
default: daxiaoStr = String.valueOf(daxiao);
}
return flower + daxiaoStr;
}
}
构建一套扑克牌
public class Poker { private static String[] flowers = {"黑桃", "红桃", "草花", "方块"};
private static int[] daxiaos = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
private Card[] cards;//卡片数组,应该有54张,这里去掉大小王,只52张 /**
* 构造器
* 按顺序实例化52张扑克牌
*/
public Poker() {
cards = new Card[52];
for(int i = 0; i < flowers.length; i++) {
for(int j = 0; j < daxiaos.length; j++) {
cards[i * 13 + j] = new Card(flowers[i], daxiaos[j]);
}
}
} /**
* 洗牌 (随机乱序)
* 对于52个Card实例数组随机乱序排列
*/
public void shuffle() {
for(int i = 0, len = cards.length; i < len; i++) {
int index = (int) (Math.random() * len);
Card temp = cards[index];
cards[index] = cards[i];
cards[i] = temp;
}
} /**
* 发牌
* @param index 发牌的位置
*
*/
public Card deal(int index) {
return cards[index];
} }
测试
public class Test { public static void main(String[] args) {
Poker poker = new Poker();//生成扑克牌
poker.shuffle(); // 洗牌(乱序)
Card c1 = poker.deal(0); // 发第一张牌
//创建四个玩家,每个玩家13张空牌
Card [] person1=new Card[13];
Card [] person2=new Card[13];
Card [] person3=new Card[13];
Card [] person4=new Card[13];
//为玩家的的空牌赋值
for(int i=1;i<=52;i++)
{
if(i<=13) person1[i-1]=poker.deal(i-1);
if(i>13&&i<=26) person2[i-1-13]=poker.deal(i-1);
if(i>26&&i<=39) person3[i-1-26]=poker.deal(i-1);
if(i>39&&i<=52) person4[i-1-39]=poker.deal(i-1);
}
//打印
System.out.println("玩家1");
for (Card card : person1) {
System.out.print(card+" ");
}
System.out.println("");
System.out.println("玩家2");
for (Card card : person2) {
System.out.print(card+" ");
}
System.out.println("");
System.out.println("玩家3");
for (Card card : person3) {
System.out.print(card+" ");
}
System.out.println("");
System.out.println("玩家4");
for (Card card : person4) {
System.out.print(card+" ");
}
}
}
结果:
玩家1
红桃6 方块4 方块A 黑桃4 草花2 红桃Q 红桃J 红桃K 方块3 黑桃K 方块8 黑桃7 黑桃5
玩家2
草花A 黑桃2 红桃7 草花3 草花5 方块J 方块9 草花9 草花K 黑桃8 草花J 黑桃10 红桃8
玩家3
方块7 红桃4 红桃2 草花6 方块2 黑桃Q 黑桃9 黑桃A 草花10 草花7 红桃10 红桃A 方块Q
玩家4
红桃9 方块5 草花8 方块10 方块K 草花Q 黑桃3 红桃5 黑桃6 黑桃J 红桃3 方块6 草花4
注意事项
1. 不要忘记在Poker类里导入Card类,在Test类里面导入Poker和Card;
2. 自己想想,动手做一做才能真正理解。
Java练习——扑克牌发牌器的更多相关文章
- Java集合,扑克牌的小项目练习
Java集合,扑克牌的小项目练习 2小时学完了类与集合,一直二倍加跳过,集合和类的学习我觉得得多实践中去记住,光靠背,永远也背不完,学的时候记一下常用的,特殊的就行了,用的时候再查,多写代码才能会,哈 ...
- 11大Java开源中文分词器的使用方法和分词效果对比
本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...
- C算法编程题(一)扑克牌发牌
前言 上周写<我的编程开始(C)>这篇文章的时候,说过有时间的话会写些算法编程的题目,可能是这两天周末过的太舒适了,忘记写了.下班了,还没回去,闲来无事就写下吧. 因为写C++的编程题和其 ...
- 黑马程序员——【Java高新技术】——类加载器
---------- android培训.java培训.期待与您交流! ---------- 一.概述 (一)类加载器(class loader) 用来动态加载Java类的工具,它本身也是Java类. ...
- Java中的类加载器
转载:http://blog.csdn.net/zhangjg_blog/article/details/16102131 从java的动态性到类加载机制 我们知道,Java是一种动态语言.那么怎 ...
- Java中的类加载器以及Tomcat的类加载机制
在加载阶段,虚拟机需要完成以下三件事情: 1.通过一个类的全限定名来获取其定义的二进制字节流. 2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构. 3.在Java堆中生成一个代表这个类 ...
- java swing 音乐播放器-乐乐音乐
乐乐音乐1.0(本地版) 乐乐音乐是基于musique 开源播放器开发的java swing音乐播放器,实现了mp3.flac.ape.wav等多种音频格式的播放和ksc歌词的解析.制作和显示. 完成 ...
- [原]用C#模拟实现扑克牌发牌、排序程序…
(1)52张扑克牌,四种花色(红桃.黑桃.方块和梅花),随机发牌给四个人. (2)最后将四个人的扑克牌包括花色打印在控制台上. 其中: 花色和点数用枚举类型实现 每张扑克牌用结构实 ...
- [原]用C#模拟实现扑克牌发牌、排序程序。
(1)52张扑克牌,四种花色(红桃.黑桃.方块和梅花),随机发牌给四个人. (2)最后将四个人的扑克牌包括花色打印在控制台上. 其中: 花色和点数用枚举类型实现 每张扑克牌用结构实 ...
随机推荐
- Gin-Go学习笔记五:Gin-Web框架 文件的操作
文件的操作 1> 文件的创建,删除,写入内容,读取内容.(此实例使用的是text文件) 2> Gin 并没有提供文件的创建,删除,读写这个操作的专门的接口,所以采用的是常用 ...
- android自定义圆角实线边框,圆角虚线边框,直实线,虚实线,半圆角边框
先上图 在现实项目开发中,单纯的Button,EditText等控件远远不能满足我们项目的UI设计需求,这时候,我们就需要自己动手丰衣足食啦.接下来先给大家介绍一些属性,备注写的都非常清楚啦,我就不啰 ...
- MySQL读写分离之Proxy
MySQL Proxy: ======================================================== MySQL_Proxy Master Slave1 Slav ...
- Linux高级运维 第八章 部署docker容器虚拟化平台
8.1 Docker概述 实验环境: CENTOS7.4-63 64位 Dcoker概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到 ...
- 如何检查linux服务器是否被入侵
被入侵服务器的症状 当服务器被没有经验攻击者或者自动攻击程序入侵了的话,他们往往会消耗 100% 的资源.他们可能消耗 CPU 资源来进行数字货币的采矿或者发送垃圾邮件,也可能消耗带宽来发动 DoS ...
- MySQL权限管理、配置文件(三)
一.MySQL权限管理 GRANT 权限 ON 授权范围 TO '用户名'@'允许的ip(所有%)' IDENTIFIED BY '用户密码'; 权限:参加下表,一般常用的是CREATE.DELETE ...
- clickjacking 攻击
文章:Web安全之点击劫持(ClickJacking) 点击劫持(ClickJacking)是一种视觉上的欺骗手段.大概有两种方式,一是攻击者使用一个透明的iframe,覆盖在一个网页上,然后诱使用户 ...
- Android 获取联系人的号码的类型描述
...... int index = phonesCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); int t ...
- Nginx——端口负载均衡
前言 Nginx做的代理后面SpringBoot的项目,1N3T的架构,Tomcat的配置也进行了相应的调优. 配置 这里主要来简单的说下Nginx的端口负载均衡,具体的大家可以参考 Nginx文档 ...
- 16-cmake语法-OpeCV3.3.1_CMakeLists.txt的部分注释
OpeCV3.3.1 的 CMakeLists.txt 的部分注释. # Disable in-source builds to prevent source tree corruption. # @ ...