黑马程序员技术交流社区
标题:
关于创建枚举对象
[打印本页]
作者:
彭盼
时间:
2012-7-6 20:00
标题:
关于创建枚举对象
自己写了一个模拟扑克牌的小程序:
package cn.pengpan.card;
/*
* 需求:编写一个扑克牌的小程序,要求程序能够对扑克牌进行洗牌,并模拟发牌成4组,将发牌结果以log形式打印。
* 思路:扑克牌有54张,包括从2到10,j,q,k,A共13种面值,每种面值有四种花色:黑桃,红桃,梅花,方块,外加
* 两张王,大王和小王,共计有54张牌,可将每张牌都视为一个对象,需要建立Card类来描述牌这个类的属性,牌值和花色
* 属性分别定义为value,suit,利用一个工具类DealCard对牌进行洗牌操作,并利用另一个工具类SendCard进行发牌操作。
*
* */
public class Card {
private String value;//牌的面值
private String suit;//牌的花色
public Card(String value,String suit)//对牌进行初始化
{
this.value=value;
this.suit=suit;
}
public String toString()
{
return this.value+this.suit;//覆盖Object的toString方法,得到想要显示的字符串信息
}
}
复制代码
package cn.pengpan.card;
import java.util.Random;
/*
* 此为洗牌工具类,主要包括shuffle方法用来洗牌,getCurrentCard用来得到当前牌的下一张牌
* */
public class DealCard {
private final int NUM=52;//普通牌的常量
public final int SUM=54;//牌的总量常量
private Card[] cards=new Card[54];//定义一个数组容器装入牌的实例对象
public int currentCard=0;
public DealCard()//利用构造函数把牌存入数组
{
String[] values={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};//普通牌的13种面值
String[] suits={"黑桃","红桃","梅花","方块"};
for (int i = 0; i < NUM; i++) {
cards[i]=new Card(values[i%13], suits[i%4]);
}
cards[52]=new Card("大王", "黑色");
cards[53]=new Card("小王", "红色");
}
public void shuffle()//洗牌
{
for (int i = 0; i < cards.length; i++) {
Card temp=cards[i];
int randomnum=new Random().nextInt(SUM);//利用随机数随机交换牌的位置
cards[i]=cards[randomnum];
cards[randomnum]=temp;
}
}
public Card getCurrentCard()
{
if (currentCard<SUM) {
return cards[currentCard++];//得到当前的牌
}
return null;
}
}
package cn.pengpan.card;
/*
发牌并打印
*/
public class SendCard {
public static void main(String[] args) {
DealCard dealCard=new DealCard();
dealCard.shuffle();
for(int i=0;i<13;i++){
System.out.printf("%-20s%-20s%-20s%-20s\n",
dealCard.getCurrentCard().toString(),dealCard.getCurrentCard().toString(),
dealCard.getCurrentCard().toString(),dealCard.getCurrentCard().toString());
}
System.out.printf("%-20s%-20s\n",dealCard.getCurrentCard().toString(),dealCard.getCurrentCard().toString());
}
}
复制代码
这个程序是用数组去装入牌的对象,如果用枚举实现这个程序,一共有54张牌,
挨个创建太麻烦,能否把枚举与for循环结合起来实现这个程序,我试了几次,
都不行,枚举常量不能有其他代码,哪位高手能否利用枚举快速简便实现这个程序,
还有程序最后的一句要打印输出4组的牌,因为多了两个大小王,不得不另外又写
一句打印,请帮忙改进下最后这几句,让输出更加简便,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2