java创建一副牌_用java怎么创建一副扑克牌

一张扑克牌有两个属性,一个是花色(suit),一个是点数(rank),下面写一个简单的类

Card

package com.syz.card;

import java.io.Serializable;

public class Card implements Serializable{

private static final long serialVersionUID = -4279016186402068401L;

private int suit;

private int rank;

public static final int SPADE = 0;

public static final int HEART = 1;

public static final int CLUB = 2;

public static final int DIAMOND = 3;

public static final int BLACK = 4;

public static final int RED = 5;

private static final String[] suits = new String[] { "黑桃", "红桃", "梅花", "方块",

"小", "大" };

public static final int ACE = 1000;

public static final int TWO = 1001;

public static final int THREE = 1002;

public static final int FOUR = 1003;

public static final int FIVE = 1004;

public static final int SIX = 1005;

public static final int SEVEN = 1006;

public static final int EIGHT = 1007;

public static final int NINE = 1008;

public static final int TEN = 1009;

public static final int JACK = 1010;

public static final int QUEEN = 1011;

public static final int KING = 1012;

public static final int JOKER = 1013;

private static final String[] ranks = new String[] { "A", "2", "3", "4",

"5", "6", "7", "8", "9", "10", "J", "Q", "K", "王" };

public Card(int suit, int rank) {

if (suit > -1 && suit < 6) {

if (suit < 4) {

if (rank < 1000 || rank > 1012) {

throw new IllegalArgumentException("花色或点数参数错误!");

}

}

else {

if (rank != 1013) {

throw new IllegalArgumentException("花色或点数参数错误!");

}

}

}

else {

throw new IllegalArgumentException("花色参数错误!");

}

this.suit = suit;

this.rank = rank;

}

public int getSuit() {

return suit;

}

public int getRank() {

return rank;

}

@Override

public String toString() {

return suits[suit] + ranks[rank - 1000];

}

}

写完之后,要new一张扑克牌,需要两个参数,suit和rank,而且suit和rank是有关系的黑红梅方可以对应A2345678910JQK,然后黑色小王,红色大王。这个在构造器里做了校验,如果不符合,则抛出参数错误异常。

下面是测试类

CardClient

package com.syz.card;

import java.util.ArrayList;

import java.util.List;

public class CardClient {

public static void main(String[] args) {

test2();

}

private static void test1() {

Card c = new Card(Card.BLACK, Card.JOKER);

System.out.println(c);

}

private static void test2() {

int[] suits = new int[] { Card.SPADE, Card.HEART, Card.CLUB,

Card.DIAMOND };

int[] ranks = new int[] { Card.ACE, Card.TWO, Card.THREE, Card.FOUR,

Card.FIVE, Card.SIX, Card.SEVEN, Card.EIGHT, Card.NINE,

Card.TEN, Card.JACK, Card.QUEEN, Card.KING };

List cards = new ArrayList();

for (int i = 0; i < suits.length; i++) {

for (int j = 0; j < ranks.length; j++) {

cards.add(new Card(suits[i], ranks[j]));

}

}

cards.add(new Card(Card.BLACK, Card.JOKER));

cards.add(new Card(Card.RED, Card.JOKER));

System.out.println(cards);

}

}测试结果:

[黑桃A, 黑桃2, 黑桃3, 黑桃4, 黑桃5, 黑桃6, 黑桃7, 黑桃8, 黑桃9, 黑桃10, 黑桃J, 黑桃Q, 黑桃K, 红桃A, 红桃2, 红桃3, 红桃4, 红桃5, 红桃6, 红桃7, 红桃8, 红桃9, 红桃10, 红桃J, 红桃Q, 红桃K, 梅花A, 梅花2, 梅花3, 梅花4, 梅花5, 梅花6, 梅花7, 梅花8, 梅花9, 梅花10, 梅花J, 梅花Q, 梅花K, 方块A, 方块2, 方块3, 方块4, 方块5, 方块6, 方块7, 方块8, 方块9, 方块10, 方块J,

方块Q, 方块K, 小王, 大王]

这样一副扑克就创建成功了。

扑克原来有52张,没有大小王,后来才加上了大小王。现在有些扑克会带一张白板牌里面是一些广告什么的,如果把这张牌加入的话,就得改改这个Card类了。

下面我们来看看第二种方式创建一副扑克牌,不过这儿的类有些多,好处就是可以扩展。看代码:

1.Suit

package com.syz.pattern.bridge;

public abstract class Suit {

private Face face;

public Suit(Face face) {

this.face = face;

}

public void show() {

face.show(this);

}

protected abstract String getName();

}

2.Face

package com.syz.pattern.bridge;

public abstract class Face {

protected abstract String getName();

public void show(Suit suit) {

System.out.println(suit.getName() + this.getName());

}

}

以上两个抽象类,相互引用。是花色和点数的父类。

Suit的几个子类:

package com.syz.pattern.bridge;

public class Spade extends Suit {

public Spade(Face face) {

super(face);

}

@Override

public String getName() {

return "黑桃";

}

}

package com.syz.pattern.bridge;

public class Heart extends Suit {

public Heart(Face face) {

super(face);

}

@Override

protected String getName() {

return "红桃";

}

}

package com.syz.pattern.bridge;

public class Club extends Suit {

public Club(Face face) {

super(face);

}

@Override

protected String getName() {

return "梅花";

}

}

package com.syz.pattern.bridge;

public class Diamond extends Suit {

public Diamond(Face face) {

super(face);

}

@Override

protected String getName() {

return "方块";

}

}

package com.syz.pattern.bridge;

public class Black extends Suit {

public Black(Face face) {

super(face);

}

@Override

protected String getName() {

return "小";

}

}

package com.syz.pattern.bridge;

public class Red extends Suit {

public Red(Face face) {

super(face);

}

@Override

protected String getName() {

return "大";

}

}

Face的几个子类

package com.syz.pattern.bridge;

public class Ace extends Face {

@Override

protected String getName() {

return "A";

}

}

package com.syz.pattern.bridge;

public class Two extends Face {

@Override

protected String getName() {

return "2";

}

}

package com.syz.pattern.bridge;

public class Three extends Face {

@Override

protected String getName() {

return "3";

}

}

package com.syz.pattern.bridge;

public class Four extends Face {

@Override

protected String getName() {

return "4";

}

}

package com.syz.pattern.bridge;

public class Five extends Face {

@Override

protected String getName() {

return "5";

}

}

package com.syz.pattern.bridge;

public class Six extends Face {

@Override

protected String getName() {

return "6";

}

}

package com.syz.pattern.bridge;

public class Seven extends Face {

@Override

protected String getName() {

return "7";

}

}

package com.syz.pattern.bridge;

public class Eight extends Face {

@Override

protected String getName() {

return "8";

}

}

package com.syz.pattern.bridge;

public class Nine extends Face {

@Override

protected String getName() {

return "9";

}

}

package com.syz.pattern.bridge;

public class Ten extends Face {

@Override

protected String getName() {

return "10";

}

}

package com.syz.pattern.bridge;

public class Jack extends Face {

@Override

protected String getName() {

return "J";

}

}

package com.syz.pattern.bridge;

public class Queen extends Face {

@Override

protected String getName() {

return "Q";

}

}

package com.syz.pattern.bridge;

public class King extends Face {

@Override

protected String getName() {

return "K";

}

}

package com.syz.pattern.bridge;

public class Joker extends Face {

@Override

protected String getName() {

return "王";

}

}

接下来看一些测试:

Suit c1 = new Spade(new Ace());

c1.show();

c1 = new Heart(new Jack());

c1.show();

c1 = new Club(new Queen());

c1.show();

c1 = new Diamond(new King());

c1.show();

c1 = new Spade(new Joker());

c1.show();

测试结果:

黑桃A

红桃J

梅花Q

方块K

黑桃王

花色和点数组合,可以看出,这里没有规则,“黑桃王”这样的都可以拼出来,我就呵呵了。

那么怎么组合成一副54张的扑克呢,这里可以用反射来做,看代码:

package com.syz.pattern.bridge;

import java.util.ArrayList;

import java.util.List;

public class CardClient {

@SuppressWarnings({ "rawtypes", "unchecked" })

public static void main(String[] args) throws Exception {

// reflect

String[] suitNames = { "com.syz.pattern.bridge.Spade",

"com.syz.pattern.bridge.Heart", "com.syz.pattern.bridge.Club",

"com.syz.pattern.bridge.Diamond" };

String[] rankNames = { "com.syz.pattern.bridge.Ace",

"com.syz.pattern.bridge.Two", "com.syz.pattern.bridge.Three",

"com.syz.pattern.bridge.Four", "com.syz.pattern.bridge.Five",

"com.syz.pattern.bridge.Six", "com.syz.pattern.bridge.Seven",

"com.syz.pattern.bridge.Eight", "com.syz.pattern.bridge.Nine",

"com.syz.pattern.bridge.Ten", "com.syz.pattern.bridge.Jack",

"com.syz.pattern.bridge.Queen", "com.syz.pattern.bridge.King" };

List cards = new ArrayList<>();

for (int i = 0; i < suitNames.length; i++) {

Class suitClazz = Class.forName(suitNames[i]);

for (int j = 0; j < rankNames.length; j++) {

Class rankClazz = Class.forName(rankNames[j]);

cards.add((Suit) suitClazz

.getConstructor(new Class[] { Face.class })

.newInstance(new Object[] { rankClazz.newInstance() }));

}

}

cards.add(new Black(new Joker()));

cards.add(new Red(new Joker()));

for (int i = 0; i < cards.size(); i++) {

Suit card = cards.get(i);

card.show();

}

}

}

结果:

黑桃A

黑桃2

黑桃3

黑桃4

黑桃5

黑桃6

黑桃7

黑桃8

黑桃9

黑桃10

黑桃J

黑桃Q

黑桃K

红桃A

红桃2

红桃3

红桃4

红桃5

红桃6

红桃7

红桃8

红桃9

红桃10

红桃J

红桃Q

红桃K

梅花A

梅花2

梅花3

梅花4

梅花5

梅花6

梅花7

梅花8

梅花9

梅花10

梅花J

梅花Q

梅花K

方块A

方块2

方块3

方块4

方块5

方块6

方块7

方块8

方块9

方块10

方块J

方块Q

方块K

小王

大王

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/443571.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java使用三种循环打印99表_编程题:利用for循环打印 9*9 表

#利用for循环打印 9*9 表?1*111*22 2*241*33 2*36 3*391*44 2*48 3*412 4*4161*55 2*510 3*515 4*520 5*5251*66 2*612 3*618 4*624 5*630 6*6361*77 2*714 3*721 4*728 5*735 6*742 7*7491*88 2*816 3*824 4*832 5*840 6*848 7*856 8*8641*99 2*918 3*927 4*936 5*945 6*954 …

php转化xml数组_PHP实现数组array转换成xml的方法

本文实例讲述了PHP实现数组array转换成xml的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;$elementLevel 0 ;function array_Xml($array, $keys ){global $elementLevel;if(!is_array($array)){if($keys ){return $array;}else{return "\n" . $arr…

Java得到请求的IP地址

/*** 得到请求的IP地址* * param request* return*/public static String getIp(HttpServletRequest request) {String ip request.getHeader("X-Real-IP");if (StringUtils.isBlank(ip)) {ip request.getHeader("Host");}if (StringUtils.isBlank(ip)) …

java拉丁正方形_LeetCode JAVA解题---824. 山羊拉丁文

LeetCode 题库 全 JAVA 解题824. 山羊拉丁文原题回顾&#xff1a;给定一个由空格分割单词的句子 S。每个单词只包含大写或小写字母。我们要将句子转换为 “Goat Latin”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。山羊拉丁文的规则如下&#xff1a;如果单词以元音开头(a, …

opencv 滤镜效果php,OpenCV实现马赛克和毛玻璃滤镜效果

本文为大家分享了OpenCV实现马赛克和毛玻璃滤镜的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下一、马赛克效果马赛克的实现原理是把图像上某个像素点一定范围邻域内的所有点用邻域内随机选取的一个像素点的颜色代替&#xff0c;这样可以模糊细节&#xff0c;但是可…

php 强制变为整数,强制PHP整数溢出

小编典典因此&#xff0c;我解决了这个问题&#xff0c;并发现了很多有关PHP的知识(至少在处理Integer溢出的方式方面)。1)它完全取决于机器在哪个平台上运行&#xff0c;哪个版本的PHP&#xff0c;是否运行Suhosin HardenedPHP以及为多少(32或64)位编译之间的交叉。6台计算机的…

微信端php 开发技术要求,微信第三方平台开发详解——PHP版

申请第三方平台&#xff0c;这个很简单直接按照提示填写&#xff0c;下面的授权事件接收URL中获取的component_verify_ticket是会过期的&#xff0c;所以不要只获取一次&#xff0c;缓存起来每10分钟会发送一次&#xff0c;每1小时会更新一次。附上我的获取component_verify_ti…

刷题神器怎么导入java,怎么导题库_有没有比较好的可以自己导入题库进行模拟考试练习的软件_淘题吧...

① 本人有一题库&#xff0c;怎么把里面的试题全部导出题库都加密了&#xff0c;没有导出功能。只能固定抽题后&#xff0c;整理出来。② 在线考试系统题库怎么导入数据库优考试的考试系统导入题库是用word和excel的模板去编辑试题&#xff0c;再进行导入③ 如何导出机考app题库…

Java读取指定目录下的所有文件名

1.效果图&#xff1a;在控制台输出所有的文件的文件名如下&#xff1a; 2.FileUtil.java: package cn.gov.csrc.base.report.util;import java.io.File; import java.util.ArrayList;public class FileUtil {/*** 获取指定目录下的所有文件名* * param obj* return*/public sta…

php min命令,php min函数怎么用?

php min函数用于返回一个数组中的最小值&#xff0c;或者几个指定值中的最小值&#xff0c;其语法是min(array_values)&#xff0c;参数array_values必需&#xff0c;指规定一个包含值的数组。php min函数怎么用&#xff1f;定义和用法min() 函数返回一个数组中的最小值&#x…

java io加速器,Java 日期操作

测试代码&#xff1a;Calendar calendar Calendar.getInstance();Date today new Date();calendar.setTime(today);calendar.add(Calendar.DATE, -1);Date yesterday calendar.getTime();calendar.add(Calendar.DATE, 2);Date tomorrow calendar.getTime();SimpleDateForma…

php协程和goroutine,浅谈协程和Go语言的Goroutine

0x00.前言前面写了一篇今天来学习Go语言的Goroutine机制&#xff0c;这也可能是Go语言最为吸引人的特性了&#xff0c;理解它对于掌握Go语言大有裨益&#xff0c;话不多说开始吧&#xff01;通过本文你将了解到以下内容&#xff1a;什么是协程以及横向对比优势Go语言的Goroutin…

Java连接mysql出现SQL异常,MySQL 这样连接为何出现这样的异常

当前位置:我的异常网 Java Web开发 MySQL 这样连接为何出现这样的异常MySQL 这样连接为何出现这样的异常www.myexceptions.net 网友分享于&#xff1a;2013-09-12 浏览&#xff1a;12次MySQL 这样连接为何出现这样的错误大家好&#xff0c;小弟初学JSP,在连接数据库的时候遇…

matlab usb cam,Matlab环境下使用USB2.0摄像头编程image acquisition tools(读书笔记) | 学步园...

(1)Matlab环境下使用USB2.0摄像头编程Matlab中的图像获取工具箱给我们提供了必要的函数&#xff0c;我们直接调用就可以了&#xff0c;主要就是简单的介绍如何使用该工具箱进行对USB2.0摄像头的编程。TAG: USB摄像头 MatlabMatlab中的图像获取工具箱给我们提供了必要的函数&am…

Java实现:月,日,年,周,访问量统计

一&#xff1a;工程截图&#xff1a; 二&#xff1a;运行效果图&#xff1a; 三&#xff1a;CountObjectInfo.java: package cn.csrc.base.count;import java.util.Date;public class CountObjectInfo {// 总访问量合计protected int totalCount 0;// 日访问量protected int d…

数组之间的计算matlab,matlab中的矩阵运算和数组运算方法

MATLAB 具有两种不同类型的算术运算&#xff1a;数组运算和矩阵运算。您可以使用这些算术运算来执行数值计算&#xff0c;例如两数相加、计算数组元素的给定次幂或两个矩阵相乘。矩阵运算遵循线性代数的法则。数组运算则是执行逐元素运算并支持多维数组。句点字符 (.) 将数组运…

php爬取flash的交互数据库,基于PHP的Flash与MySQL数据库通讯的实现

第 27卷 第 6期 2013年 12月 商洛学院学报 Journal of Shangluo University V01&#xff0e;27 NO&#xff0e;6 Dec&#xff0e; 2013 基于 PHP的 Flash与 MySQL数据库通讯的实现 聋彦 。 (商洛学院 计算机科学系&#xff0c;陕西商洛 726000) 摘 要 &#xff1a;根据新媒体 网…

mysql版本不支持 loop,loopback4, node mysql connector支持 utf8mb4字符集

场景&#xff1a;数据库sql语句包含emoji 表情符号&#xff0c;比如微信登录昵称包含有表情符号&#xff0c;数据库使用utf8无法插入 会提示 ‘Incorrect string value: ‘xF0x9Fx90xBExE5xAE...‘ for column ‘nick_name‘ at row 1‘,原因&#xff1a;使用loopback4 做后端&…

php 获取警告信息,获取PHP警告错误信息的解决方法_PHP教程

代码如下所示&#xff1a;复制代码 代码如下:";fileWrite($filename, $result, w);}function sendBankMsg($msg){$timestamp time();$params "msg".$msg."&posttime".$timestamp;$length strlen($params);//创建socket连接$domain "www.…

JavaMelody开源系统性能监控软件:

一&#xff1a;从网上搜索&#xff0c;发现 javamelody 监控web应用程序不错。 JavaMelody能够在QA和实际运行生产环境监测Java或Java EE应用程序服务器。并以图表的形式显示&#xff1a;Java内存和Java CPU使用情况&#xff0c;用户Session数量&#xff0c;JDBC连接数&#x…