2021-06-30

上个星期老师给个任务说如何用集合写出斗地主的炸弹💣和顺子
我丢 ,我。。。只会给张三 李四 王五发牌
直接上🐎。

package com.poker;


import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

/**
 * 1.准备牌:54张牌存储到一个集合中
 * 特殊牌:大王,小王
 * 其他52张牌:
 * 定义一个数组/集合,存储4种花色;
 * 定义一个数组/集合,存储13个序号
 * 循环嵌套遍历两个数组/集合,组装52张牌
 * <p>
 * 2.洗牌
 * 使用集合工具Collections的方法
 * static void shuffle(List<?> list)
 * 随机打乱集合中元素的顺序
 * <p>
 * 3.发牌
 * 1人17张牌为底牌,轮流发牌,集合的索引(0-53)%3
 * 定义4个集合,存储3个玩家的牌和底牌
 * <p>
 * 4.看牌
 * 直接打印集合,遍历存储玩家和底牌的集合
 */
public class Poker {
    public static void main(String[] args) {
        //创建 一个容器装 扑克
        ArrayList<String> poker = new ArrayList<>();
        String[] colors = {"♥", "♠", "♦", "♣"};
        String[] numbers = {"A", "J", "Q", "K", "2", "3", "4", "5", "6", "7", "8", "9", "10"};

        //遍历两个数组 里的字符串
        for (String color : colors) {
            for (String number : numbers) {
                //1.准备扑克
                poker.add(color + number);
            }
        }
        poker.add("大王");
        poker.add("小王");
        poker.add("花牌");

        //2.洗牌
        //Random i = new Random();
        Collections.shuffle(poker);
      //  System.out.println(poker);
        //3.发牌
        //先创建三个容器
        ArrayList<String> arrayList01 = new ArrayList<>();
        ArrayList<String> arrayList02 = new ArrayList<>();
        ArrayList<String> arrayList03 = new ArrayList<>();
        ArrayList<String> dipai = new ArrayList<>();

        for (int i = 0; i < poker.size(); i++) {
            String p = poker.get(i);
            if (i >= 51) {
                dipai.add(p);
            } else if (i % 3 == 0) {
                arrayList01.add(p);
            } else if (i % 3 == 1) {
                arrayList02.add(p);
            } else if (i % 3 == 2) {
                arrayList03.add(p);
            }
        }

        //张三的牌排序
//       for (String arrLists01 :arrayList01 ){
//           arrayList01=
//       }
        System.out.println("张三:" + arrayList01);
        System.out.println("李四:" + arrayList02);
        System.out.println("王五:" + arrayList03);
        System.out.println("底牌:" + dipai);
    }

}

有❀牌是因为我家那边都是这样玩的
源码图

下面看看老师的思路
先创建一个poker类

package com.bjpowernode.p1.map;

public class Poker {
    private String color;
    private int number;
    //   A--> 14
    //   2 -->15
    //   小王  99
    //   大王  100

    public Poker() {
    }

    public Poker(String color, int number) {
        this.color = color;
        this.number = number;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    @Override
    public String toString() {
        if(number<=10){
             return color+number;
        }else if(number<=15){
            return color+"JQKA2".charAt(number-11);
        }else{
            return color;
        }
    }
}

然后实现一个Comparator<>接口
在这里插入图片描述

package com.bjpowernode.p1.map;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;

public class OrderPokerByNumaber implements Comparator<Poker> {
    @Override
    public int compare(Poker o1, Poker o2) {
        int diff=o2.getNumber()-o1.getNumber();
        if(diff!=0){
            return diff;
        }else{
            String [] arr={"黑桃","红桃","梅花","方块"};
            List<String> list= Arrays.asList(arr);  //将数组转换成集合
            return list.indexOf(o1.getColor())-list.indexOf(o2.getColor());
        }
    }
}

最后测试

package com.bjpowernode.p1.map;

import java.util.ArrayList;
import java.util.Random;
import java.util.TreeSet;

public class Lx01 {
    public static void main(String[] args) {
        ArrayList<Poker> allPoker=new ArrayList<>();
        for(int i=3;i<=15;i++){
            String [] arr={"黑桃","红桃","梅花","方块"};
            for(String s : arr){
                Poker poker=new Poker(s,i);
                allPoker.add(poker);
            }
        }
        allPoker.add(new Poker("大王",100));
        allPoker.add(new Poker("小王",99));
        for (Poker poker : allPoker) {
            System.out.print(poker+" ");
        }
        System.out.println();
        Random random=new Random();
        TreeSet<Poker> seta=new TreeSet<>(new OrderPokerByNumaber());
        TreeSet<Poker> setb=new TreeSet<>(new OrderPokerByNumaber());
        TreeSet<Poker> setc=new TreeSet<>(new OrderPokerByNumaber());
        for(int i=0;i<17;i++){
            int index1= random.nextInt(allPoker.size());
            Poker p1= allPoker.remove(index1);
            seta.add(p1);
            int index2= random.nextInt(allPoker.size());
            Poker p2=allPoker.remove(index2);
            setb.add(p2);
            int index3= random.nextInt(allPoker.size());
            Poker p3=allPoker.remove(index3);
            setc.add(p3);
        }

        System.out.println("玩家A 手中的牌");
        for (Poker poker : seta) {
            System.out.print(poker+" ");
        }

    }
}

在这里插入图片描述

以下是一个更复杂的 SQL 查询语句,它使用了多个子查询和窗口函数: WITH -- 定义一个子查询,获取销售额排名前10的产品 top_products AS ( SELECT product_id, SUM(sales) AS total_sales FROM orders WHERE order_date BETWEEN '2021-01-01' AND '2021-06-30' GROUP BY product_id ORDER BY total_sales DESC LIMIT 10 ), -- 定义一个子查询,获取销售额排名前10的客户 top_customers AS ( SELECT customer_id, SUM(sales) AS total_sales FROM orders WHERE order_date BETWEEN '2021-01-01' AND '2021-06-30' GROUP BY customer_id ORDER BY total_sales DESC LIMIT 10 ), -- 定义一个窗口函数,计算每个客户的销售额排名 customer_sales_rank AS ( SELECT customer_id, SUM(sales) AS total_sales, ROW_NUMBER() OVER (ORDER BY SUM(sales) DESC) AS sales_rank FROM orders WHERE order_date BETWEEN '2021-01-01' AND '2021-06-30' GROUP BY customer_id ) -- 最终查询,获取纽约市销售额排名前10的客户,以及他们购买的销售额排名前10的产品 SELECT customers.id AS customer_id, customers.name AS customer_name, products.id AS product_id, products.name AS product_name, SUM(orders.sales) AS total_sales FROM orders -- 连接顾客信息 INNER JOIN customers ON orders.customer_id = customers.id -- 连接产品信息 INNER JOIN products ON orders.product_id = products.id -- 仅查询纽约市的客户 WHERE customers.city = 'New York' -- 仅查询销售额排名前10的客户 AND customers.id IN (SELECT customer_id FROM top_customers) -- 仅查询销售额排名前10的产品 AND products.id IN (SELECT product_id FROM top_products) -- 仅查询客户销售额排名前10的订单 AND customers.id IN (SELECT customer_id FROM customer_sales_rank WHERE sales_rank <= 10) GROUP BY customers.id, customers.name, products.id, products.name ORDER BY customers.id, total_sales DESC, products.id;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值