Java基礎(chǔ)高級綜合練習(xí)題撲克牌的創(chuàng)建
最近學(xué)了很多的知識,腦容量小,記不清,還是得做做練習(xí)!
今天就做了一個撲克牌的練習(xí)
首先呢..這個邏輯一定要非常清楚,我們要想做出一副撲克牌,必定要弄清楚每一張牌和整的一副牌
首先分析 一張撲克
一張牌里面有什么?相信大家看圖(圖不是我寫的)就應(yīng)該懂了,一張撲克有屬于它自己的花色(紅桃,黑桃,梅花,方塊) 以及自己的點數(shù)(A,2,3…..J,Q,K)就這兩種屬性,對吧!
那么花色符號,點數(shù)符號是個啥? 花色符號就是來代替我們的花色的,我們不可能拿著“紅桃”這種文字寫進(jìn)程序吧!所以我們可以用數(shù)字來代替
我們就按照下面的,一 一對應(yīng)
/** * 王 ♥ ♠ ♣ ♦ * 1 2 3 4 5 * A J Q K 小王 大王 * 1 11 12 13 14 15 **/
好了,我們已經(jīng)把每張?zhí)厥庖稽c的撲克給對應(yīng)好了!我們可以開始寫代碼了
我的代碼文件:
- APoker.java————–一張撲克
- Poker.java—————-一副撲克
- Test.java——————測試
APoker.java先給大家展示
public class APoker { //implements Comparable<APoker> //花色 private int color; //點數(shù) private int count; //花色符號 private String colorText; //點數(shù)符號 private String countText; //寫構(gòu)造方法 public APoker(int color, int count, String colorText, String countText) { super(); this.color = color; this.count = count; this.colorText = colorText; this.countText = countText; } //GET SET 方法,進(jìn)行封裝 public int getColor() { return color; } public void setColor(int color) { this.color = color; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public String getColorText() { return colorText; } public void setColorText(String colorText) { this.colorText = colorText; } public String getCountText() { return countText; } public void setCountText(String countText) { this.countText = countText; } //重寫 toString 方法,因為我們需要顯示每張牌的具體情況 @Override public String toString() { return "APoker [color=" + color + ", count=" + count + ", colorText=" + colorText + ", countText=" + countText + "]\n"; } }
這里還是非常容易理解的,無非就是進(jìn)行了封裝和重寫toString方法。
OK,一張撲克寫完了,我們接下來寫一副撲克牌
一副撲克牌
我再把那個圖拿下來
我們發(fā)現(xiàn)一副撲克牌里面有花色數(shù)量,撲克牌的數(shù)量,以及所有牌(所有牌也就是一個集合)。另外這里面還有著幾個方法,這里我就寫創(chuàng)建撲克(),洗牌()抽取一張() 吧。
現(xiàn)在看下
Poker.java:
import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; public class Poker { //花色數(shù)量 private int colorcount; //牌的數(shù)量 private int pokercount; //牌的集合 private List<APoker> mList; //進(jìn)行封裝 public int getColorcount() { return colorcount; } public void setColorcount(int colorcount) { this.colorcount = colorcount; } public int getPokercount() { return pokercount; } public void setPokercount(int pokercount) { this.pokercount = pokercount; } public List<APoker> getmList() { return mList; } public void setmList(List<APoker> mList) { this.mList = mList; } /** * 王 ♥ ♠ ♣ ♦ * 1 2 3 4 5 * A J Q K 小王 大王 * 1 11 12 13 14 15 **/ //創(chuàng)建一副撲克牌 public List<APoker> creatPoker() { //初始化colorcount pokercount colorcount=5;//一副撲克有 王 ♥ ♠ ♣ ♦這五種花色 pokercount=54;//一副撲克共有54張牌 mList=new ArrayList<APoker>(); // ♥ ♠ ♣ ♦----------先分析這四種,因為這四種里面才含有A-K的值,小王大王后面處理 for (int i = 2; i <=5; i++) { //得到每種花色里面的牌 for (int j = 1; j <= 13; j++) { String colorText=null; String countText=null; switch (i) { case 2: colorText="♥"; break; case 3: colorText="♠"; break; case 4: colorText="♣"; break; case 5: colorText="♦"; break; } switch (j) { case 1: countText="A"; break; case 11: countText="J"; break; case 12: countText="Q"; break; case 13: countText="K"; break; default: countText=j+""; //除了A,J,Q,K,都直接使用數(shù)字,這里是將j轉(zhuǎn)化為字符 break; } APoker aPoker1=new APoker(i, j, colorText, countText); mList.add(aPoker1); //把♥ ♠ ♣ ♦這四種花色塞進(jìn)一副撲克里面 } } APoker aPoker2=new APoker(1, 14, "王", "小王");//寫小王 APoker aPoker3=new APoker(1, 14, "王", "大王");//寫大王 mList.add(aPoker2);//把小王塞進(jìn)一副撲克里面去 mList.add(aPoker3);//把大王塞進(jìn)一副撲克里面去 return mList; } /** *洗牌方法 **/ public List<APoker> shufflePoker() { Collections.shuffle(mList); //這是Collections的一個把集合打亂的方法 return mList; } /** * 隨機(jī)抽牌 **/ public APoker getRandomPoker() { Random random=new Random();//獲取一個隨機(jī)數(shù) int index=random.nextInt(54); return mList.get(index); } }
這里慢慢看也很容易的,我已經(jīng)全部把每一步解釋了,大家根據(jù)那個對應(yīng)關(guān)系應(yīng)該很容易理解。
兩個寫好了,我們可以進(jìn)行使用了
Test.java就是我們用來測試我們之前寫好的代碼!
創(chuàng)建一副撲克
import java.util.List; public class Test { public static void main(String[] args) { Poker poker=new Poker();//創(chuàng)建一副撲克對象 List<APoker> mList=poker.creatPoker(); 調(diào)用creatPoker()方法,創(chuàng)建一副撲克 System.out.println(mList);打印出來! } }
我們來看結(jié)果
OK 54張撲克被創(chuàng)建了!
洗牌
我們修改一下Test.java的內(nèi)容
import java.util.List; public class Test { public static void main(String[] args) { Poker poker=new Poker(); List<APoker> mList=poker.creatPoker(); List<APoker> mList2=poker.shufflePoker(); System.out.println(mList2); } }
打印一下
果然,,牌的順序已經(jīng)亂了,我們進(jìn)行了洗牌
隨機(jī)抽牌
我們繼續(xù)重寫一下Test.java
import java.util.List; public class Test { public static void main(String[] args) { Poker poker=new Poker(); List<APoker> mList=poker.creatPoker(); APoker ap=poker.getRandomPoker(); System.out.println(ap); } }
打印一下
果然它隨機(jī)抽取了一張,每次打印抽取的牌都是不同的,這里就不展示了!
OK,大家繼續(xù)學(xué)習(xí)吧,come on!
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
spring cloud gateway轉(zhuǎn)發(fā)服務(wù)報錯的解決
這篇文章主要介紹了spring cloud gateway轉(zhuǎn)發(fā)服務(wù)報錯的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09SpringCloud之Config配置中心與Redis分布式鎖詳解
這篇文章主要給大家介紹了SpringCloud Alibaba中Config配置中心,Redis分布式鎖,文中有詳細(xì)的代碼示例供大家參考,需要的朋友可以參考閱讀2023-05-05Java源碼解析CopyOnWriteArrayList的講解
今天小編就為大家分享一篇關(guān)于Java源碼解析CopyOnWriteArrayList的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01java中JVM中如何存取數(shù)據(jù)和相關(guān)信息詳解
這篇文章主要介紹了JVM中如何存取數(shù)據(jù)和相關(guān)信息詳解,Java源代碼文件(.java后綴)會被Java編譯器編譯為字節(jié)碼文件,然后由JVM中的類加載器加載各個類的字節(jié)碼文件,加載完畢之后,交由JVM執(zhí)行引擎執(zhí)行。JVM中怎么存取數(shù)據(jù)和相關(guān)信息呢?,需要的朋友可以參考下2019-06-06SpringBoot之spring.factories的使用方式
這篇文章主要介紹了SpringBoot之spring.factories的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-01-01Java?對象在?JVM?中的內(nèi)存布局超詳細(xì)解說
這篇文章主要介紹了Java?對象在?JVM?中的內(nèi)存布局超詳細(xì)解說,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-09-09SpringMVC使用JsonView針對統(tǒng)一實體返回不同信息
這篇文章主要為大家介紹了SpringMVC使用JsonView針對統(tǒng)一實體返回不同信息,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03Java中new關(guān)鍵字和newInstance方法的區(qū)別分享
在初始化一個類,生成一個實例的時候,newInstance()方法和new關(guān)鍵字除了一個是方法一個是關(guān)鍵字外,最主要的區(qū)別是創(chuàng)建對象的方式不同2013-07-07