关于扑克牌的简单排序问题
来源:互联网 发布:筑龙投标软件下载 编辑:程序博客网 时间:2024/04/28 11:43
问题:
求一副杂乱的牌的排序,有梅花(CLUBS),方块(DIAMONDS),红桃(HEARTS),黑桃(SPADES)。每种颜色为1,1,....13,不包含两张大王。
解:
以下为简单的随意抽象实现,现实情况可能更复杂。因为是随机产生扑克牌,如果并发几千万的情况,内存可能会出现问题,简单的一副牌是OK的。
CODE:
import java.util.Random;enum CardType{CLUBS,DIAMONDS,HEARTS,SPADES}class Card{ CardType cardType; int num; public void setNum(int n){ this.num=n; } public int getNum(){ return this.num; } public void setCardType(CardType ct){ this.cardType=ct; } public CardType getCardType(){ return this.cardType; } }class Cards{ private static Random r=new Random(); private Card[] cards=null; public Cards(){ init(); } /** *初始化 */ private void init(){ cards=new Card[52]; cards[0]=produceCard(); for(int i=1;i<52;i++){ Card c=produceCard(); int j=i-1; while(j>=0){ if(!eq(cards[j],c)){ j--; }else{ c=produceCard(); j=i-1; } } cards[i]=c; } } /** * 洗牌 */ public void shulffle(){ cards=null; init(); } public Card produceCard(){ Card c=new Card(); CardType ct=CardType.class.getEnumConstants()[r.nextInt(4)]; int num=0; while(num==0){ num=r.nextInt(14); } c.setCardType(ct); c.setNum(num); return c; } public boolean contain(Card card){ for(int i=0;i<cards.length;i++){ Card c=cards[i]; if(eq(c,card)){ return true; } } return false; } private boolean eq(Card c1,Card c2){ if(c1.getNum()==c2.getNum()&&c1.getCardType()==c2.getCardType()){ return true; } return false; } /** *默认排序 *<pre> * 按枚举类型:梅花,方块,红桃,黑桃,从1到13排序 *</pre> */ public void sortCards(){ Card[] cardSorted=new Card[52]; for(int i=0;i<cards.length;i++){ int ind=0; if(cards[i].getCardType()==CardType.CLUBS){ ind=cards[i].getNum()-1; cardSorted[ind]=cards[i]; }else if(cards[i].getCardType()==CardType.DIAMONDS){ ind=cards[i].getNum()+12; cardSorted[ind]=cards[i]; }else if(cards[i].getCardType()==CardType.HEARTS){ ind=cards[i].getNum()+25; cardSorted[ind]=cards[i]; }else if(cards[i].getCardType()==CardType.SPADES){ ind=cards[i].getNum()+38; cardSorted[ind]=cards[i]; } } cards=cardSorted; } public Card[] getCards(){ return cards; } public Card getCards(int index) throws Exception{ if(index<0){ throw new Exception("数组下标异常!"); } return cards[index]; } //TODO 按类型排序 //public void sortCards(String type){} //TODO 按数量分牌 //public Cards distributeCards(int n){} }
简单测试:
public class TestCards {public static void main(String[] agrs){Cards cs=new Cards();Card[] arr_c=cs.getCards();for(int i=0;i<arr_c.length;i++){System.out.print(arr_c[i].getNum()+"\t");System.out.print(arr_c[i].getCardType());System.out.println();}
打印结果:
9CLUBS5SPADES13HEARTS7CLUBS3SPADES12CLUBS11DIAMONDS2DIAMONDS3DIAMONDS11SPADES7HEARTS12DIAMONDS2HEARTS8SPADES10HEARTS5HEARTS4SPADES11HEARTS10CLUBS13CLUBS7SPADES13SPADES1CLUBS12HEARTS6SPADES6DIAMONDS5DIAMONDS4DIAMONDS8HEARTS3HEARTS1DIAMONDS3CLUBS8DIAMONDS9HEARTS1HEARTS1SPADES7DIAMONDS13DIAMONDS6HEARTS11CLUBS8CLUBS4CLUBS9DIAMONDS10DIAMONDS5CLUBS12SPADES6CLUBS4HEARTS10SPADES9SPADES2SPADES2CLUBS
简单测试---排序再打印结果:
//排序后再打印结果cs.sortCards();arr_c=cs.getCards();for(int i=0;i<arr_c.length;i++){System.out.print(arr_c[i].getNum()+"\t");System.out.print(arr_c[i].getCardType());System.out.println();}
结果:
1CLUBS2CLUBS3CLUBS4CLUBS5CLUBS6CLUBS7CLUBS8CLUBS9CLUBS10CLUBS11CLUBS12CLUBS13CLUBS1DIAMONDS2DIAMONDS3DIAMONDS4DIAMONDS5DIAMONDS6DIAMONDS7DIAMONDS8DIAMONDS9DIAMONDS10DIAMONDS11DIAMONDS12DIAMONDS13DIAMONDS1HEARTS2HEARTS3HEARTS4HEARTS5HEARTS6HEARTS7HEARTS8HEARTS9HEARTS10HEARTS11HEARTS12HEARTS13HEARTS1SPADES2SPADES3SPADES4SPADES5SPADES6SPADES7SPADES8SPADES9SPADES10SPADES11SPADES12SPADES13SPADES
- 关于扑克牌的简单排序问题
- 关于扑克牌排序和洗牌问题
- 扑克牌问题之排序
- 扑克牌的排序程序
- 关于一些简单的排序问题
- 关于扑克牌的解
- 关于扑克牌的算法
- 扑克牌的顺子问题
- 关于排序问题-冒泡排序的简单案例
- 一个简单的扑克牌小游戏
- 算法:扑克牌的顺子问题
- 简单的排序问题
- 关于排序的问题
- 关于排序的问题
- 集合的一些应用 扑克牌 年龄排序
- 集合的一些应用 扑克牌 年龄排序
- 扑克牌问题
- 扑克牌问题
- 嵌入式linux的网络编程(3)--TCP Client程序设计
- 学技术,练武功
- 一个奇怪的死循环
- dialog嵌套listview的方法和遇到的问题
- JAVA连接DB2
- 关于扑克牌的简单排序问题
- C++第9周项目1分段函数求值
- 信息系统项目管理师论文习作沟通管理
- StructLayoutLayout 属性无法通过GetCustomAttributes 或者 Attributes获得
- 信息系统项目管理师论文习作质量管理
- 信息系统项目管理师范围管理习作
- 开源 免费 java CMS - FreeCMS1.5-简历管理
- Node.js 包的装载 与 导出
- 2013-C++第9周项目参考解答链接集