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练习——扑克牌发牌器的更多相关文章

  1. Java集合,扑克牌的小项目练习

    Java集合,扑克牌的小项目练习 2小时学完了类与集合,一直二倍加跳过,集合和类的学习我觉得得多实践中去记住,光靠背,永远也背不完,学的时候记一下常用的,特殊的就行了,用的时候再查,多写代码才能会,哈 ...

  2. 11大Java开源中文分词器的使用方法和分词效果对比

    本文的目标有两个: 1.学会使用11大Java开源中文分词器 2.对比分析11大Java开源中文分词器的分词效果 本文给出了11大Java开源中文分词的使用方法以及分词结果对比代码,至于效果哪个好,那 ...

  3. C算法编程题(一)扑克牌发牌

    前言 上周写<我的编程开始(C)>这篇文章的时候,说过有时间的话会写些算法编程的题目,可能是这两天周末过的太舒适了,忘记写了.下班了,还没回去,闲来无事就写下吧. 因为写C++的编程题和其 ...

  4. 黑马程序员——【Java高新技术】——类加载器

    ---------- android培训.java培训.期待与您交流! ---------- 一.概述 (一)类加载器(class loader) 用来动态加载Java类的工具,它本身也是Java类. ...

  5. Java中的类加载器

    转载:http://blog.csdn.net/zhangjg_blog/article/details/16102131 从java的动态性到类加载机制   我们知道,Java是一种动态语言.那么怎 ...

  6. Java中的类加载器以及Tomcat的类加载机制

    在加载阶段,虚拟机需要完成以下三件事情: 1.通过一个类的全限定名来获取其定义的二进制字节流. 2.将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构. 3.在Java堆中生成一个代表这个类 ...

  7. java swing 音乐播放器-乐乐音乐

    乐乐音乐1.0(本地版) 乐乐音乐是基于musique 开源播放器开发的java swing音乐播放器,实现了mp3.flac.ape.wav等多种音频格式的播放和ksc歌词的解析.制作和显示. 完成 ...

  8. [原]用C#模拟实现扑克牌发牌、排序程序…

    (1)52张扑克牌,四种花色(红桃.黑桃.方块和梅花),随机发牌给四个人. (2)最后将四个人的扑克牌包括花色打印在控制台上. 其中:     花色和点数用枚举类型实现     每张扑克牌用结构实 ...

  9. [原]用C#模拟实现扑克牌发牌、排序程序。

    (1)52张扑克牌,四种花色(红桃.黑桃.方块和梅花),随机发牌给四个人. (2)最后将四个人的扑克牌包括花色打印在控制台上. 其中:     花色和点数用枚举类型实现     每张扑克牌用结构实 ...

随机推荐

  1. MYSQL中IN,INSTR,FIND_IN_SET函数效率比较(转)

    今天写代码时前台传过来类似‘1,2,3,4,5,6’的字符串,这种情况直接用IN是无效的,需要把字符串分割成数组或者组装成列表,然后再利用mabatis的foreach函数 <select id ...

  2. Android Okhttp POST提交键值对

    以前的项目网络连接那块一直坚持使用HttpClient,总是会出现一些莫名奇妙的问题,现在新的项目使用了OKHttp网络框架,发现超级好用,上网再了解下,发现OkHttp口碑真的不错,对比之下Http ...

  3. 竟然有人在群里谈交钱培训PI。。。。等哥哥有时间,断了你们的财路

    PI是工具,很不错的工具.统一管理接口,这点对大公司来说还是有必要的.而且PI的日志记录很详细,用的好的话,绝对物超所值.

  4. ARM64编译工具链下载

    下面是自制的用于编译ARMv8指令的交叉编译工具链: 1.运行在PC上,支持SVE指令,不支持SVE ACLE,版本GCC9.2 https://pan.baidu.com/s/1_NnwajWCel ...

  5. Python 模拟伯努利试验和二项分布

    1.模拟 27 次投掷硬币的伯努利试验 代码: from scipy import stats import numpy as np p = 0.5 # 生成冻结分布函数 bernoulliDist ...

  6. Logstash 学习资料

    学习资料 网址 Logstash Reference(官方) https://www.elastic.co/guide/en/logstash/current/introduction.html

  7. 20180610模拟赛T1——脱离地牢

    Description 在一个神秘的国度里,年轻的王子Paris与美丽的公主Helen在一起过着幸福的生活.他们都随身带有一块带磁性的阴阳魔法石,身居地狱的魔王Satan早就想着得到这两块石头了,只要 ...

  8. 修改JDK安装路径的作用

    JDK的默认安装路径是Program Files文件夹,而Program Files的两个英文单词间有空格, 而当JDK的安装路径里包含空格时,在设置CLASSPATH时,可能会引发莫名奇妙的错误, ...

  9. MyBatis源码 核心配置解析 properties元素

    XMLConfigBuilder的parseConfiguration(XNode)方法,用于解析配置文件 XMLConfigBuilder的propertiesElement(XNode)方法,用于 ...

  10. MVC Core 使用TagHelper扩展几个插件

    未完待续... 案例1:按钮权限校验,无权限不显示,利用TagHelper控制元素是否输出 [HtmlTargetElement("tc-permission", TagStruc ...