本系列博客汇总在这里:Java系列_汇总
注:上图来源于百度百科
- 封装一个扑克牌的类,编写构建一副扑克牌的方法,对指定的扑克牌有排序、洗牌以及对指定的扑克牌有分组排序(按花色分组排序,每组内按大小排序)的方法;从指定的扑克牌中抽取一张牌的方法。
- 排序规则
- 花色数据表示
- APoker 类(单张扑克):
package cn.tx.poker; public class APoker implements Comparable<APoker> { /** * 花色值 */ private int color; /** * 花色符号 */ private String colorText; /** * 牌值 */ private int value; /** * 牌值符号 */ private String valueText; public int getColor() { return color; } public void setColor(int color) { this.color = color; } public String getColorText() { return colorText; } public void setColorText(String colorText) { this.colorText = colorText; } public int getValue() { return value; } public void setValue(int value) { this.value = value; } public String getValueText() { return valueText; } public void setValueText(String valueText) { this.valueText = valueText; } public APoker(int color, String colorText, int value, String valueText) { super(); this.color = color; this.colorText = colorText; this.value = value; this.valueText = valueText; } @Override public String toString() { return "\n"+"APoker [ 花色 = " + colorText + ",点数 = " + valueText + "\t]"; } /* * 重写比较的方法 * @see java.lang.Comparable#compareTo(java.lang.Object) */ @Override public int compareTo(APoker o) { //先根据花色来比较 int val = o.color - this.color ; if(val == 0) { //如果花色相同使用值来比较 val = this.value - o.value; } return val; } }
- Poker 类(一副扑克):
package cn.tx.poker; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; public class Pokers { /** * 扑克张数 */ private int pokerCount; /** * 花色数量 */ private int colorCount; /** * 扑克的集合 */ private List<APoker> aList; /** * 存储组的集合 */ private List<ColorGroup> cgList; public int getPokerCount() { return pokerCount; } public void setPokerCount(int pokerCount) { this.pokerCount = pokerCount; } public int getColorCount() { return colorCount; } public void setColorCount(int colorCount) { this.colorCount = colorCount; } public List<APoker> getaList() { return aList; } public void setaList(List<APoker> aList) { this.aList = aList; } /** * * 描述:创建扑克牌的方法 * @return */ public List<APoker> createPoker() { //初始化扑克牌的数量 pokerCount = 54; //初始化花色的数量 colorCount = 5; //创建扑克集合 aList = new ArrayList<APoker>(); /* ♚ ♥ ♦ ♠ ♣ 1 2 3 4 5 A 2 3 4 5 6 7 8 9 10 J Q K S B 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 */ //循环非王花色 for(int i = 2;i <= 5; i++) { //循环非王花色里面的值 for(int j = 1; j <= 13;j++) { //花色的符号 String colorText = null; //值的符号 String valueText = null; //给花色赋值的一个过程 colorText = findColorText(i); //给扑克的值赋值符号 valueText = findValueText(j); //创建一张扑克对象 APoker ap = new APoker(i, colorText, j, valueText); //把每一张扑克对象放入扑克盒 aList.add(ap); } } //创建小王 APoker ap1 = new APoker(1, "♚", 14, "S"); //创建大王 APoker ap2 = new APoker(1, "♚", 15, "B"); //把大小王对象放入扑克盒 aList.add(ap1); aList.add(ap2); return aList; } /** * * 描述:洗牌 * @return */ public List<APoker> shufflePoker() { Collections.shuffle(this.aList); return aList; } /** * * 描述:随机抽取一张牌 * @return */ public APoker getRandomPoker() { Random r = new Random(); //获取随机索引 int index = r.nextInt(this.pokerCount); return aList.get(index); } /** * * 描述:排序 * @return */ public List<APoker> sortPoker() { Collections.sort(aList); return aList; } public List<ColorGroup> sortGroup() { //创建大集合 cgList = new ArrayList<ColorGroup>(); //遍历扑克牌 for(APoker ap : aList) { //获得扑克的花色 int color = ap.getColor(); //根据花色找组 ColorGroup cg = this.findGroup(color); if(cg == null) { //创建一个组 ColorGroup cGroup = new ColorGroup(); cGroup.setColor(color); //设置花色符号 cGroup.setColorText(findColorText(color)); //把扑克加入组中 cGroup.getApList().add(ap); //把组加入组集合 cgList.add(cGroup); } else { cg.getApList().add(ap); } } //获得扑克组中的扑克牌数量 for(ColorGroup cg2 : cgList) { //获得组中的集合 List<APoker> aList = cg2.getApList(); //对组中的集合排序 Collections.sort(aList); //获得组的张数 cg2.setPokerCount(aList.size()); } Collections.sort(cgList); return cgList; } //根据花色找组 public ColorGroup findGroup(int color) { //定义一个组的对象 ColorGroup cg1 = null; //遍历组集合 for(ColorGroup cg : cgList) { //如果传递过来的花色和其中一个花色匹配 if(color == cg.getColor()) { cg1 = cg; break; } } return cg1; } /** * * 描述:根据花色值找花色的符号 * @param color * @return */ public String findColorText(int color) { String colorText = null; switch (color) { case 1: colorText = "♚"; break; case 2: colorText = "♥"; break; case 3: colorText = "♦"; break; case 4: colorText = "♠"; break; case 5: colorText = "♣"; break; default: break; } return colorText; } public String findValueText(int value) { String valueText = null; switch (value) { case 1: valueText = "A"; break; case 11: valueText = "J"; break; case 12: valueText = "Q"; break; case 13: valueText = "K"; break; default: valueText = value+"";break; } return valueText; } }
- ColorGroup 类(分组):
package cn.tx.poker; import java.util.ArrayList; import java.util.List; public class ColorGroup implements Comparable<ColorGroup> { /** * 组内的扑克数 */ private int pokerCount; /** * 组的花色 */ private int color; /** * 花色符号 */ private String colorText; /** * 组内的扑克 */ private List<APoker> apList = new ArrayList<APoker>(); public int getPokerCount() { return pokerCount; } public void setPokerCount(int pokerCount) { this.pokerCount = pokerCount; } public int getColor() { return color; } public void setColor(int color) { this.color = color; } public String getColorText() { return colorText; } public void setColorText(String colorText) { this.colorText = colorText; } public List<APoker> getApList() { return apList; } public void setApList(List<APoker> apList) { this.apList = apList; } @Override public int compareTo(ColorGroup o) { return this.getColor() - o.getColor(); } @Override public String toString() { return "\n本组扑克数量 = " + pokerCount + ", 本组花色 = " + colorText +"\n"+ apList + "\n"; } }
- 主类(测试)
package cn.tx.poker; import java.util.List; import java.util.Scanner; public class Test { public static void main(String[] args) { //创建一副扑克牌的对象 Pokers p = new Pokers(); p.createPoker(); boolean b = true; Scanner sc = new Scanner(System.in); while(b) { System.out.println("请选择:"); System.out.println("1...洗牌"); System.out.println("2...随机抽取一张"); System.out.println("3...排序"); System.out.println("4...分组排序"); System.out.println("0...退出"); int val = sc.nextInt(); switch(val) { case 1:System.out.println(p.shufflePoker());break; case 2:System.out.println(p.getRandomPoker());break; case 3:System.out.println(p.sortPoker());break; case 4:System.out.println(p.sortGroup());break; default: b = false;break; } if(b!=false){System.out.println("\n");} } System.out.println("谢谢使用"); } }
- 结果图
理解需要详细阅读程序,写程序思路和条理很重要,在编写代码之前应当详细理清业务逻辑和相关功能的实现与设计!
如有错误,欢迎指正!