黑马程序员技术交流社区
标题:
求教 面向对象的简单的扑克牌问题
[打印本页]
作者:
hg3093483
时间:
2013-4-1 16:26
标题:
求教 面向对象的简单的扑克牌问题
本帖最后由 hg3093483 于 2013-4-2 23:26 编辑
请问大神们,怎么封装 扑克类 当中的花色和数字,然后 (打乱顺序打印出来)也就是 洗牌呢?最好能用精简的代码实现以下,非常感谢?我目前还是面向过程中。下面是我的代码。。。
class Test1 {
public static void main(String[] args) {
String[] hs = {"红桃","方块","梅花","黑桃"}; //静态初始化扑克的四种花色,用了字符串数组
String[] zs = {"A","1","2","3","4","5","6","7","8","9","10","J","Q","K"}; //静态初始化扑克十三个数
String[] hehe = new String[52]; // 创建新数组,代表扑克盒
for (int x=0;x<hs.length ; x++) { // 外循环是花色,每一种花色有十三个数字
for (int y=0;y<zs.length ;y++ ) { //内循环是控制十三个数字
int z = 0; // 把int型变量 z 初始化为0,也就是扑克盒数组的0角标
hehe[z]= hs[x]+zs[y]; //扑克盒0角标的值是红桃A
System.out.print(hehe[z]+" ");
while (z<52) { // 判断z,当z自增到52时跳出循环
z++; // z每次自增1
}
if (y==13) { // 每当到红桃13时换行
System.out.println();
}
}
}
}
}
作者:
陈圳
时间:
2013-4-1 21:17
package exercises;
import java.util.ArrayList;
import java.util.List;
import java.util.Collections;
/*做出一副扑克牌(不包含大小王)?*/
public class Cards {
public static void main(String[] args){
CardNum[] num=CardNum.values();
CardType[] type=CardType.values();
List<String> list=new ArrayList<String>();
for(CardNum n:num){
for(CardType t:type){
list.add(n+" "+t);
}
}
Collections.shuffle(list);//Collections内的将集合元素打乱的方法;这里将其作为洗牌操作
System.out.println(list);
}
}
enum CardNum{
NUM1(CardType.HEITAO),NUM2(CardType.HEITAO),NUM3(CardType.HEITAO),NUM4(CardType.HEITAO),
NUM5(CardType.HEITAO),NUM6(CardType.HEITAO),NUM7(CardType.HEITAO),NUM8(CardType.HEITAO),
NUM9(CardType.HEITAO),NUMJ(CardType.HEITAO),NUMQ(CardType.HEITAO),NUMK(CardType.HEITAO);
private CardType type;
CardNum(CardType type){
this.type=type;
}
public String toString(){
switch(this){
case NUM1:
return "1";
case NUM2:
return "2";
case NUM3:
return "3";
case NUM4:
return "4";
case NUM5:
return "5";
case NUM6:
return "6";
case NUM7:
return "7";
case NUM8:
return "8";
case NUM9:
return "9";
case NUMJ:
return "J";
case NUMQ:
return "Q";
case NUMK:
return "K";
}
return null;
}
}
enum CardType{
HEITAO,HONGTAO,HEIXING,HONGXING;
public String toString(){
switch(this){
case HEITAO:
return "#";//用这种符号代替几种不同类型的棋牌.
case HONGTAO:
return "%";
case HEIXING:
return "^";
case HONGXING:
return "&";
}
return null;
}
}
复制代码
作者:
王亚东
时间:
2013-4-1 21:28
http://bbs.itheima.com/forum.php ... 3680&pid=275526
作者:
疯狂程序
时间:
2013-4-1 22:29
/*
功能:实现扑克牌的显示以及洗牌的功能
作者:闫继闯
*/
import java.util.*;
/*
成员方法
public static poke[] crePoke();定义一个方法,用来创建扑克牌
public static void pokeShow(poke[] pArr);显示所有的扑克牌
public static poke[] randomPokeShow();对数组打乱顺序,洗牌
*/
class Demo2{
//入口函数
public static void main(String[] args) {
System.out.println("洗牌前");
pokeShow(crePoke());
System.out.println("洗牌后");
pokeShow(randomPokeShow());
}
//定义一个方法,用来创建扑克牌
public static poke[] crePoke() {
//定义一个存储字符串类型的数组 cArr(colorArray),用来储存扑克牌的四种花色
String[] cArr = {"红桃","方块","黑桃","梅花"};
//定义一个存储字符串类型的数组 nArr(numberArray),用来存储扑克牌的13种上边的值
String[] nArr = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
/*定义一个存储poke类型的数组,相当于扑克盒,此数组的长度为cArr.length * nArr.length
cArr.length是一个数组的方法,计算数组的长度,扑克本身处大小王一个52张,也就是cArr的长度
乘以nArr数组的长度,但是由于数组没有初始化,返回值为null
*/
poke[] pArr = new poke[cArr.length * nArr.length];
//定义存储扑克牌的下标
int index = 0;
//外循环,四种花色的控制
for (int x = 0;x < cArr.length ;x++ ) {
//内循环,13种值
for (int y = 0;y < nArr.length;y++ ) {
//创建扑克牌,并利用构造函数对其进行初始化,用扑克盒pArr[index],通过index++,
//将每张扑克牌存入数组中(扑克盒)
pArr[index] = new poke(cArr[x],nArr[y]);
//一次下标++,把数据存入数组中
index++;
}
}
return pArr;
}
//显示所有的扑克牌
public static void pokeShow(poke[] pArr) {
//通过遍历将所有的扑克牌进行显示
for (int x = 0;x <pArr.length ;x++ ) {
//控制,当输出一张花色,进行换行
if (x % 13 == 0) {
//换行
System.out.println();
}
//调用show()方法进行显示
pArr[x].show();
}
//换行
System.out.println("----------------------------------------------------------------------");
}
//对数组打乱顺序,洗牌
public static poke[] randomPokeShow() {
//调用方法创建扑克牌,返回poke类型的数组
poke[] pArr = crePoke();
//System.out.print(pArr.length);做个小实验返回52
//创建随机对象
Random random = new Random();
//遍历所有数组
for (int x = 0;x < pArr.length;x++ ) {
//任意查找随机值,存入int型p中
int p = random.nextInt(pArr.length);
//对数组内的值进行调换,以达到乱序洗牌
poke tmp = pArr[x];
pArr[x] = pArr[p];
pArr[p] = tmp;
}
//返回数组
return pArr;
}
}
/*
定义一个类
成员属性有:
String color;
String number;
成员方法有:
public void setColor(String color);
public void setNumber(String number);
public String getColor();
public String getNUmber();
void show();
构造方法有:
public poke();
public poke(String color,String number);
*/
class poke {
//创建一个string类型的字符串,color代表扑克牌的花色(红桃,方块,黑桃,梅花);权限为私有,只能在本类中使用
private String color;
//创建一个string类型的字符串,number代表扑克牌的是扑克牌上的值,权限为私有,只能在本类中使用
private String number;
/*
定义有参量的构造函数,目的是当创建对象时,对color和number进行初始化
*/
public poke(String color,String number) {
this.color = color;
this.number = number;
}
//定义无参数的构造函数
public poke() {
}
/*
创建一个方法,方法名为setColor,返回值为void,参数是string color
作用是,通过此方法对class类中的成员变量string color 进行赋值
this代表当前的poke类,public表示此方法为公共方法
*/
public void setColor(String color) {
this.color = color;
}
/*
创建一个方法,方法名为setNumber,返回值为void,参数是string number
作用是,通过此方法通过此方法对class类中的成员变量string number 进行赋值
this代表当前的poke类,public表示此方法为公共方法
*/
public void setNumber(String number) {
this.number = number;
}
/*
public表示此方法为公共方法,返回值为字符串类型,方法名字为getColor,
作用是,显示成员变量中color.
*/
public String getColor() {
return color;
}
/*
public表示此方法为公共方法,返回值为字符串类型,方法名字为getNumber,
作用是,显示成员变量中color.
*/
public String getNUmber() {
return number;
}
//将扑克牌的花色和值显示出来,返回值为void
void show() {
System.out.print(color+number+" | ");
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2