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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王虎 中级黑马   /  2012-10-13 10:13  /  1298 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 王虎 于 2012-10-13 10:21 编辑

                                       分享一下,大家有空也可以按要求自己练练
/*
        扑克牌程序
        1.得到52张扑克牌
        2.洗牌

        3.查找出红桃A在哪个位置

        分析:扑克牌有花色  值    可以定义一个Poker类

*/
import java.util.*;
class Test
{
        public static void main(String[] args)
        {
                Poker[] ps=PokerTools.getPokers();
                PokerTools.showPokers(ps);//没洗牌之前
                PokerTools.xiPai(ps);//洗牌操作
                System.out.println("\n--------------------------------------");
                PokerTools.showPokers(ps);//洗牌之后
                System.out.println("\n--------------------------------------");
                int index=PokerTools.findPoker(new Poker("红桃","A"),ps);
               
                System.out.println(index+1);
        }
}
//这个类作用是定义扑克的花色与面值
class PokerTools
{
        //花色
        public static final String[] cs={"黑桃","红桃","方块","梅花"};
        //面值
        public static final String[] ns={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};

        //得到52张牌
        public static Poker[] getPokers(){
               
                Poker[] ps=new Poker[cs.length*ns.length];//这个数组中的元素的默认值为null
               
                int index=0;
                for(int i=0;i<cs.length;i++){
                        
                        for(int j=0;j<ns.length;j++){
                                /*
                                ps[index]=new Poker();//通过无参构造初始化
                                //对每一张扑克牌的花色与面值进行初始化
                                ps[index].setColor(cs);
                                ps[index].setNumber(ns[j]);
                                */
                                ps[index]=new Poker(cs,ns[j]);//通过有参数构造
                                index++;
                        }
                }

                return ps;
        }
        //洗牌
        /*
                每一次得到两个在数组下标范围内的数值,
                通过这两个值来控制对应位置上的扑克对象
                进行位置交换。
        */
        public static void xiPai(Poker[] ps){
                Random ran=new Random();
                for(int i=0;i<100;i++){
                        //得到两个0-52之间的数不包含52
                        int n1=ran.nextInt(ps.length);
                        int n2=ran.nextInt(ps.length);
                        
                        //n1与n2位置上的元素交换
                        Poker p=ps[n1];
                        ps[n1]=ps[n2];
                        ps[n2]=p;
                }
        }
        //显示扑克牌
        public static void showPokers(Poker[] ps){
               
                for(int i=0;i<ps.length;i++){
                        
                        if(i%13==0){
                                System.out.println();
                        }
                        System.out.print(ps+"  ");
                }
        }
        // 查找指定的扑克所在的位置
        /*
                参数:1.要查找的扑克牌 2.所有扑克牌
                返回值:这个扑克牌所在位置
        */
        public static int findPoker(Poker p,Poker[] ps){
               
                for(int i=0;i<ps.length;i++){
                        if(ps.equals(p)){
                                return i;
                        }
                        /*
                        //当前的比较很麻烦,如果以后还要比较,还需要写这么多内容
                        if(ps.getColor().equals(p.getColor())&&ps.getNumber().equals(p.getNumber())){
                                
                                return i;
                        }*/                        
                }
                return -1;
        }
}

//定义一个扑克类
class Poker
{
        //私有化,要想外部访问,必须提供get  set方法
        private String color;
        private String number;
        /*
                构造方法重载,好处就是可以通过两种方式得到Poker对象
        */
        //提供无参构造方法
        public Poker(){
        
        }
        //提供有参构造
        public Poker(String color,String number){
                this.color=color;
                this.number=number;
        }
        //对color赋值
        public void setColor(String color){
                this.color=color;//通过this来区分局部与成员
        }
        //对number赋值
        public void setNumber(String number){
                this.number=number;
        }
        //取color值
        public String getColor(){
                return color;
        }
        //取number值
        public String getNumber(){
                return number;
        }
        //重写equals方法
        public boolean equals(Object obj){
               
                if(this==obj){
                        return true;
                }
                if(obj instanceof Poker){
                        
                        Poker p=(Poker)obj;
                        return p.color.equals(color)&&p.number.equals(number);
                }
                return false;
        }
        //重写toString
        public String toString(){
               
                return color+number;
        }
}

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

0 个回复

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