闘地主の事件の簡単な実現

前書き

最近、Java関連の知識を学び、Chuanzhiの先生から家主の事件を学びました。少し面白いと思います。ここで、Xiao Yuanは事件を調査し、いくつかの関連するメモを作成することにしました。あまり意味がないので、私たちはトピック。

ケース要件

既存のplayer1、player1、player1はポーカーを終了する必要があります。私たちの操作では、これら3人のプレーヤーに54枚のカードを発行します。このプロセスでは、次の手順を実行する必要があります。カードの
準備->カードのシャッフル->カードの取引->カードの4枚の視聴プロセス、私たちはこのプロセスを達成するために集合的な知識を使用する必要があります。

オプション1

このケースを実装するには、単一の列セットを使用します

知識フレームワーク

arrayListに継承される統合システムは次のとおりです
ここに画像の説明を挿入
。リストインターフェイスとセットインターフェイスはどちらもコレクション
ここに画像の説明を挿入
ケースから派生しています。基本的な考え方は、すべてのポーカーを格納するための大きなコレクションであるArrayListコレクションを使用し、ポーカーをトラバースして追加することです。ポーカーにカードが3枚しか残っていない場合は、ホールカードを実行し、意味のない話をせずに、コードを提供します。

コード

public class DouDiZhuDemo {
    
    
    public static void main(String[] args) {
    
    
        Collection collection = readyPoker();
        collection=shufflePoker(collection);
        ArrayList<String> dipai=new ArrayList<>();
        ArrayList<String> [] player=new ArrayList[4];
        for (int i = 0; i < player.length; i++) {
    
    
            player[i]=new ArrayList<>();
        }
        distributePoker(collection,dipai,player);
        lookPoker(dipai,player);
    }
    //准备牌
    public static Collection readyPoker(){
    
    
        ArrayList<String> poker = new ArrayList<>();
        // 静态定义数组
        String [] number= {
    
    "2","A","K","Q","J","10","9","8","7","6","5","4","3"};
        //动态定义数组,复习一下动态定义数组的方法,可以参考一下和C/C++定义数组有什么区别
        String [] color = new String[4];
        color[0]="♠";
        color[1]="♥";
        color[2]="♣";
        color[3]="♦";
        for (int i = 0; i < number.length; i++) {
    
    
            for (int i1 = 0; i1 < color.length; i1++) {
    
    
                poker.add(number[i]+color[i1]);
            }
        }
        poker.add("大王");
        poker.add("小王");
        System.out.println("开始准备poker");
        System.out.println(poker);
        return poker;
    }

    //洗牌
    public static Collection shufflePoker(Collection poker){
    
    
        Collections.shuffle((List<?>) poker);
        return poker;
    }

    //发牌
    public static void distributePoker(Collection poker,ArrayList dipai, ArrayList... player){
    
    
        ArrayList<?> poker1 = (ArrayList<?>) poker;
        String p=null;

        for (int i = 0; i < poker1.size(); i++) {
    
    
            p= (String) poker1.get(i);
            if(i>50){
    
    
                dipai.add(p);
            }else {
    
    
                for (int i1 = 0; i1 < player.length; i1++) {
    
    
                    if(i%player.length==i1){
    
    
                        player[i1].add(p);
                        break;
                    }
                }
            }
        }
    }
	//看牌
    public static void lookPoker(ArrayList dipai,ArrayList... player){
    
    
        System.out.println("-------------------------");
        System.out.println("dipai"+dipai);
        System.out.println("-----------------------");
        for (int i = 0; i < player.length; i++) {
    
    
            System.out.println("player"+i+"pokeris:"+player[i]);
        }
    }
}

図に4人いると仮定すると、小さな猿は可変パラメータパラメータ送信を使用します。これの利点は、人数を変更でき、柔軟性が高いことです。
最初に結果を見てみましょう。
ここに画像の説明を挿入
上記の場合の欠点は、カードを見るときにポーカーが順番に配置されていないことです。したがって、このケースを実装するには、他の2列セットの使用を検討する必要があります。

オプションII

家主の場合を実現するために2列セットを使用

知識フレームワーク

MapはJavaのトップレベルのインターフェースであり、インターフェースを変更するための一般的な継承システムを次の図に示します。ここに画像の説明を挿入
Xiao Apeが焦点を当てるべきなのは、Mapの下でのハッシュマップの適用です。hashMapを使用して上記のケースを実装します。あまり意味がないので、コードを提供してください

コード

public class DouDiZhuDemo {
    
    
    public static void main(String[] args) {
    
    
        Collection<Integer> pokerIndex=new ArrayList<>();
        Map<Integer, String> poker= new HashMap<>();
        readyPoker(pokerIndex,poker);
       // System.out.println(pokerIndex);
      //  System.out.println(poker);
        shufflePoker(pokerIndex);
        System.out.println(pokerIndex);
      //  System.out.println(poker.size());

        Map<String, List> disPoker = new HashMap<>();
        disPoker.put("赵丽颖",new ArrayList());
        disPoker.put("杨幂",new ArrayList());
        disPoker.put("陈乔恩",new ArrayList());
        disPoker.put("杨紫",new ArrayList());
        disPoker.put("底牌",new ArrayList());
        disPoker.put("张天爱",new ArrayList());
        disPoker.put("甘露露",new ArrayList());
        try {
    
    
            disPoker=distributePoker(pokerIndex,disPoker,poker);
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
        lookPoker(disPoker);

    }

    //准备牌
    public static void readyPoker(Collection<Integer> pokerIndex, Map<Integer, String> poker){
    
    
        //定义洗好的poker索引

        //定义poker
        System.out.println("------------------准备poker-------------------------");

        // 定义牌的数字
        List<String> numbers = List.of("2", "A", "K", "Q", "J", "10", "9", "8", "7", "6", "5", "4", "3");
       // String [] number= {"2","A","K","Q","J","10","9","8","7","6","5","4","3"};

        //动态定义数组,复习一下动态定义数组的方法,可以参考一下和C/C++定义数组有什么区别
        /*String [] color = new String[4];
        color[0]="♠";
        color[1]="♥";
        color[2]="♣";
        color[3]="♦";*/

        //定义牌的花色
        List<String> colors = List.of("♠", "♥", "♣", "♦");

        int index=0;
        pokerIndex.add(index);
        poker.put(index,"大王");
        index++;
        pokerIndex.add(index);
        poker.put(index,"小王");
        index++;

        for (String number : numbers) {
    
    
            for (String color : colors) {
    
    
                pokerIndex.add(index);
                poker.put(index,number+color);
                index++;
            }
        }
       // System.out.println(pokerIndex);
       System.out.println(poker);
        //return poker;
    }

    //洗牌
    public static void shufflePoker(Collection poker){
    
    
        System.out.println("----------开始洗牌-----------");
        Collections.shuffle((List<?>) poker);
        //return poker;
    }

    //发牌
    /*public static void distributePoker(Collection poker,ArrayList dipai, ArrayList... player){
        ArrayList<?> poker1 = (ArrayList<?>) poker;
        String p=null;

        for (int i = 0; i < poker1.size(); i++) {
            p= (String) poker1.get(i);
            if(i>50){
                dipai.add(p);
            }else {
                for (int i1 = 0; i1 < player.length; i1++) {
                    if(i%player.length==i1){
                        player[i1].add(p);
                        break;
                    }
                }
            }
        }
    }*/

    public static Map distributePoker(Collection pokerIndex,Map<String,List> disPoker,Map<Integer,String> poker ) throws Exception {
    
    
        System.out.println("-------------------------开始发牌----------------------------");
        Map<String,List> newDisPoker = new HashMap<>();

        for (int i = 0; i < pokerIndex.size(); i++) {
    
    
            if(i>50){
    
    
                if(disPoker.containsKey("底牌")){
    
    
                    List dipai = disPoker.get("底牌");
                    dipai.add(((List)pokerIndex).get(i));
                }else {
    
    
                    throw new Exception("没有底牌");
                }
            }else {
    
    
                int size = disPoker.size()-1;
                int in=0;
                for (String key :
                        disPoker.keySet()) {
    
    
                    if(key.equals("底牌")){
    
    
                        continue;
                    }
                    if(i%size==in){
    
    
                        disPoker.get(key).add(((List)pokerIndex).get(i));
                        break;
                    }
                    in++;
                }
            }
        }

        for (String name:disPoker.keySet()
        ) {
    
    
            Collections.sort(disPoker.get(name), new Comparator<Integer>() {
    
    
                @Override
                public int compare(Integer o1, Integer o2) {
    
    
                    return o2-o1;
                }
            });
        }

        //重新组装牌
        for (String name:disPoker.keySet()
             ) {
    
    
            List<String> tempList= new ArrayList<>();
            for (Object o : disPoker.get(name)) {
    
    
                tempList.add(o+":"+poker.get(o));
            }
            newDisPoker.put(name,tempList);
            //tempList.clear();
        }

        //disPoker.clear();
        return  newDisPoker;
    }

    //看牌
    /*public static void lookPoker(ArrayList dipai,ArrayList... player){
        System.out.println("-------------------------");
        System.out.println("dipai"+dipai);
        System.out.println("-----------------------");
        for (int i = 0; i < player.length; i++) {
            System.out.println("player"+i+"pokeris:"+player[i]);
        }
    }*/
    public static void lookPoker(Map<String,List> disPoker){
    
    
        System.out.println("-------------------------------准备看牌----------------------------");

        for (Map.Entry<String,List> entry :
                disPoker.entrySet()) {
    
    
            System.out.println(entry.getKey()+"::"+entry.getValue()+"共"+entry.getValue().size()+"::张牌");

        }
        System.out.println("---------------------------看牌结束-------------------------------");
    }

}

ここで言及する価値があるのは、固定長の要素をバッチで追加できるListのメソッドであり、追加後もListの長さが変わらない、つまりList.of(element ...)が追加に適していることです。固定長要素であり、この方法を採用しています。この関数にはjdkバージョンの要件があります。つまり、jdk9.0.4が推奨されます。上記のコードの実行結果は次のとおりです。
ここに画像の説明を挿入

総括する

家主との戦いの事例をリハーサルすることで、小さな類人猿はコレクションと写真に関連する知識を確認しました。古代人は次のように述べています。私の日は3回です。小さな類人猿は自分自身を振り返り、もっと一生懸命働く必要があります。

おすすめ

転載: blog.csdn.net/xueshanfeitian/article/details/106441395