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.pswp.cn/news/443571.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/443571.shtml
英文地址,請注明出處:http://en.pswp.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…