A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 彭盼 中级黑马   /  2012-7-6 20:00  /  1322 人查看  /  0 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

自己写了一个模拟扑克牌的小程序:
  1. package cn.pengpan.card;
  2. /*
  3. * 需求:编写一个扑克牌的小程序,要求程序能够对扑克牌进行洗牌,并模拟发牌成4组,将发牌结果以log形式打印。
  4. * 思路:扑克牌有54张,包括从2到10,j,q,k,A共13种面值,每种面值有四种花色:黑桃,红桃,梅花,方块,外加
  5. * 两张王,大王和小王,共计有54张牌,可将每张牌都视为一个对象,需要建立Card类来描述牌这个类的属性,牌值和花色
  6. * 属性分别定义为value,suit,利用一个工具类DealCard对牌进行洗牌操作,并利用另一个工具类SendCard进行发牌操作。
  7. *
  8. * */
  9. public class Card {
  10.         private String value;//牌的面值
  11.         private String suit;//牌的花色
  12.         public Card(String value,String suit)//对牌进行初始化
  13.         {
  14.                 this.value=value;
  15.                 this.suit=suit;
  16.                 }
  17.         public String toString()
  18.         {
  19.                 return this.value+this.suit;//覆盖Object的toString方法,得到想要显示的字符串信息
  20.         }
  21. }
复制代码
  1. package cn.pengpan.card;

  2. import java.util.Random;
  3. /*
  4. * 此为洗牌工具类,主要包括shuffle方法用来洗牌,getCurrentCard用来得到当前牌的下一张牌
  5. * */
  6. public class DealCard {
  7.         private final int NUM=52;//普通牌的常量
  8.         public final int SUM=54;//牌的总量常量
  9.         private Card[] cards=new Card[54];//定义一个数组容器装入牌的实例对象
  10.         public int currentCard=0;
  11.         public DealCard()//利用构造函数把牌存入数组
  12.         {
  13.                 String[] values={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};//普通牌的13种面值
  14.                 String[] suits={"黑桃","红桃","梅花","方块"};
  15.                 for (int i = 0; i < NUM; i++) {
  16.                         cards[i]=new Card(values[i%13], suits[i%4]);
  17.                 }
  18.                 cards[52]=new Card("大王", "黑色");
  19.                 cards[53]=new Card("小王", "红色");
  20.         }
  21.         public void shuffle()//洗牌
  22.         {
  23.                 for (int i = 0; i < cards.length; i++) {
  24.                         Card temp=cards[i];
  25.                         int randomnum=new Random().nextInt(SUM);//利用随机数随机交换牌的位置
  26.                         cards[i]=cards[randomnum];
  27.                         cards[randomnum]=temp;
  28.                 }
  29.         }
  30.         public Card getCurrentCard()
  31.         {
  32.                 if (currentCard<SUM) {
  33.                         return cards[currentCard++];//得到当前的牌
  34.                 }
  35.                 return null;
  36.         }
  37. }
  38. package cn.pengpan.card;
  39. /*
  40. 发牌并打印
  41. */
  42. public class SendCard {
  43.         public static void main(String[] args) {
  44.                 DealCard dealCard=new DealCard();
  45.                 dealCard.shuffle();
  46.                 for(int i=0;i<13;i++){
  47.                        
  48.                 System.out.printf("%-20s%-20s%-20s%-20s\n",
  49.                                 dealCard.getCurrentCard().toString(),dealCard.getCurrentCard().toString(),
  50.                                 dealCard.getCurrentCard().toString(),dealCard.getCurrentCard().toString());
  51.                         }
  52.        
  53.                 System.out.printf("%-20s%-20s\n",dealCard.getCurrentCard().toString(),dealCard.getCurrentCard().toString());
  54. }
  55. }
复制代码
这个程序是用数组去装入牌的对象,如果用枚举实现这个程序,一共有54张牌,
挨个创建太麻烦,能否把枚举与for循环结合起来实现这个程序,我试了几次,
都不行,枚举常量不能有其他代码,哪位高手能否利用枚举快速简便实现这个程序,
还有程序最后的一句要打印输出4组的牌,因为多了两个大小王,不得不另外又写
一句打印,请帮忙改进下最后这几句,让输出更加简便,谢谢

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马