集合最后的实验总结

简易的模拟斗地主的小程序

一.要求:

1.该程序包括了斗地主中的洗牌,发牌,以及看牌等相关操作

2.要将牌的大小进行排序

3.同时看三个人的手牌,以及底牌

二.分析程序:

1.首先我们需要创建一个ArrayList集合来当牌盒,通过Collections的工具类中的Shufferle来打乱牌

2.发牌可以创建三个集合来存储各自的牌,最后通过遍历的方式来实现看牌的操作

3.因为要将牌的大小排序,所以使用TreeSet来作为集合存储,而扑克牌中含有大小王,A,J,Q,K,以及花色组成,所以牌是String类型的数组,不好比较,所以使用HashMap<Integer,String>,来创建相关索引,用Integer来比较牌的大小,最后调用这个HashMap集合来查看自己的手牌

4.因为要查看各自手牌,所以创建一个方法来调用,减少代码量。

三.具体步骤:

1.创建一个ArrayList来存放Integer,并使用Collections.shuffle;来对其进行打乱

2.创建一个HashMap集合来存放扑克牌,创建相关索引

3.创建三个TreeSet集合来存储Key值,并排序

4.创建看牌的静态方法,通过Key值来得到每个人具体的牌

四.具体实现:

package Test.Map;

import java.util.*;

public class Pock {
    public static void main(String[] args){
        HashMap<Integer,String> hashMap = new HashMap<>();
        //创建一个HashMap集合来存放扑克牌,创建相关索引
        ArrayList<Integer> num = new ArrayList<>();
        //创建一个ArrayList来存放Integer
        TreeSet<Integer> player1 = new TreeSet<>();
        TreeSet<Integer> player2 = new TreeSet<>();
        TreeSet<Integer> player3 = new TreeSet<>();
        //创建三个TreeSet集合来存储Key值,并排序
        TreeSet<Integer> dipai = new TreeSet<>();
        //这个用来存放底牌
        String[] color = {"♣","♥","♦","♠"};
        String[] number = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        int i = 0;
        for (String n:number){
            for(String c:color){
                i++;
                hashMap.put(i,c+n);
                num.add(i);
                //通过增强For循环来遍历String[] ,并将得到的值放进HashMap中
            }
        }
        hashMap.put(i++,"小王");
        num.add(i);
        hashMap.put(i++,"大王");
        num.add(i);
        //还有大小双王
        Collections.shuffle(num);
        //打乱牌
        for (int j = 1;j<num.size();j++){
            if (j>=num.size()-3){
                dipai.add(num.get(j));
                //保留三张底牌
            }else {
                if (j%3==0){
                    player1.add(j);
                    //通过取余的方式,来逐一发牌
                }else if (j%3==1){
                    player2.add(j);
                }else if (j%3==2){
                    player3.add(j);
                }
            }

        }
        System.out.println("玩家一:");
        See(player1,hashMap);
        System.out.println("底牌:");
        See(dipai,hashMap);

    }
    public static void See(TreeSet<Integer> player,HashMap<Integer,String> hashMap){
        //看牌方法
        for (Integer i:player){
            //使用增强For循环来遍历玩家手中的牌,通过索引查看具体;
            System.out.print(hashMap.get(i)+" ");
        }
    }
}
//以下是初始版,逐一修改成型。
/*
{
        ArrayList<String> list = new ArrayList<>();
        ArrayList<String> play1 = new ArrayList<>();
        ArrayList<String> play2 = new ArrayList<>();
        ArrayList<String> play3 = new ArrayList<>();
        String[] color = {"♣","♥","♦","♠"};
        String[] number = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
        for (String color1:color){
            for (String number1:number){
                list.add(color1+number1);
            }
        }
        list.add("FJoker");
        list.add("RJoker");
        Collections.shuffle(list);
        for (int i = 0;i<list.size();i++){
            if (i%3==0){
                play1.add(list.get(i));
            }else if (i%3==1){
                play2.add(list.get(i));
            }else if (i%3==2){
                play3.add(list.get(i));
            }
        }
        for (String s:play1){
            System.out.println("Player1:"+s);
        }
        for (String s:play2){
            System.out.println("Player2:"+s);
        }
        for (String s:play3){
            System.out.println("Player3:"+s);
        }
    }
 */
/*
{
        int i = 0;
        HashMap<Integer,String> hashMap = new HashMap<>();
        ArrayList<String> pocker = new ArrayList<>();
        ArrayList<Integer> num = new ArrayList<>();
        String[] color = {"♣","♥","♦","♠"};
        String[] number = {"3","4","5","6","7","8","9","10","J","Q","K","A","2"};
        for (String number1:number){
            for (String color1:color){
                pocker.add(color1+number1);
            }
        }
        pocker.add("FJoker");
        pocker.add("RJoker");
        for (String s:pocker){
            hashMap.put(i,s);
            i++;
        }
        for (int j = 0;j<i;j++){
            num.add(j);
        }
        Collections.shuffle(num);
        TreeMap<Integer,String> player1 = new TreeMap<>();
        TreeMap<Integer,String> player2 = new TreeMap<>();
        TreeMap<Integer,String> player3 = new TreeMap<>();
        for (Integer n: num){
            if (n%3==0){
            player1.put(n,hashMap.get(n));
            }else if (n%3==1){
                player2.put(n,hashMap.get(n));
            }else if (n%3==2){
                player3.put(n,hashMap.get(n));
            }
        }
        Set<Map.Entry<Integer, String>> entries = player1.entrySet();
        for ( Map.Entry<Integer, String> set:entries){
            System.out.print(set.getValue()+" ");
        }

    }
 */

五.总结

集合可以包含多个数据类型,用于遍历,存储等,而此处的数据类型可有很多种,不一一列举了;

最后总结下,常用的一些数据类型的特点:

ArrayList<>,具有顺序性,即先进先出,具备可重复性,输入的元素可以有重复;

List<>,同上

Set<>,不具备顺序性,但是具备不可重复性,不可输入重复的元素

HashSet<>,同上

LinkerHashSet<>,具有顺序性,即先进先出,具备不可重复性,不可输入重复的元素

TreeSet<>,具有不可重复性,且内置Comparator方法,可进行自然排序,若TreeSet中的元素无法自然排序时,要使用匿名内部类,重写比较方法。

Map<K,V>,用于存放一些相关的索引,Key不可重复,具有顺序性

HashMap<>同上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值