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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 彼岸花 于 2012-10-15 23:33 编辑

import java.util.*;
class Test
{
        public static void main(String[] args)
        {
                //得到扑克牌
                List<Poker> list=PokerUtil.getPokers();
                PokerUtil.xipai(list);
                PokerUtil.showPokers(list);
                Poker p=new Poker("10","红桃");
                int index=PokerUtil.findPoker(list,p);
                if(index==-1){
                        System.out.println("没有这张扑克牌  "+p);
                }else{
                        System.out.println(p+" 在"+(index+1)+"位置");
                }
        }
}
//声明扑克类
class Poker
{
        String number;
        String color;
        public Poker(){}
        public Poker(String number ,String color){
                this.number=number;
                this.color=color;
        }
         public boolean equals(Object obj){   
               
                Poker p=(Poker)obj;     

                return p.number.equals(number)&&p.color.equals(color);
        }

         public String toString(){
                return color+number;
        }
}
//扑克牌工具类
class PokerUtil
{
        public static final String[] ns={"2","3","4","5","6","7","8","9","10","J","Q","K","A"};
        public static final String[] cs={"黑桃","红桃","方块","梅花"};
        //查找某张牌
        public static int findPoker(List<Poker> list,Poker p){
                return list.indexOf(p);  
        }
        //洗牌
        public static void xipai(List<Poker> list){
                Random ran=new Random();
                for(int i=0;i<100;i++){
                        int n1=ran.nextInt(list.size()); //0-52
                        int n2=ran.nextInt(list.size());
                        Poker p1=list.get(n1);
                        Poker p2=list.get(n2);
                        //将n1与n2位置上的元素进行交换.
                        list.set(n1,p2);
                        list.set(n2,p1);
                }
        }
        //显示扑克
        public static void showPokers(List<Poker> list){
                for(int i=0;i<list.size();i++){
                        if(i%ns.length==0){
                                System.out.println();
                        }
                        System.out.print(list.get(i)+"  ");
                }
        }
        //得到52张扑克牌
        public static List<Poker> getPokers(){
                List<Poker> list=new ArrayList<Poker>();
                for(int i=0;i<cs.length;i++){
                        for(int j=0;j<ns.length;j++){
                                list.add(new Poker(ns[j],cs));
                        }
                }
                return list;
        }
}
List集合在使用indexOf方法时,是用参数与集合中所有元素进行equals ,所以需要重写equals方法,因为List是有顺序的,在比较时,从头到尾依次比较,如果集合中有一个元素与参数equals为true,那么就将这个元素索引返回。如果集合中没有,那么返回-1。
总结:对于自定义类来说 在用到indexOf方法时 都需要在自定义类内重写equals方法










评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

0 个回复

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