m0_59375258 2021-06-16 20:08 采纳率: 100%
浏览 44
已采纳

用Java语音写使用多线程发扑克牌

1、Java:使用多线程,模拟将52张扑克牌随机分发给4个人,每人13张。

2、最后输出每个玩家所得的牌,牌的花色要显示出来,比如:黑桃A、红桃10、梅花J、方块K。(最好是能输出花色的图案,♠️♣️♥️)

3、用最基础的Java语言写,尽量多注释。(我基础较差,比较难看懂)

  • 写回答

3条回答 默认 最新

  • ㅤᅠᅠㅤ 2021-06-17 15:17
    关注
    /**
     * @author darkltl
     * @className Poke
     * @email darkltl@163.com
     * @description
     * 多线程发扑克牌
     */
    @Slf4j
    public class Poke {
    
        private static final Stack<String> POKES = new Stack<>();
    
        private static final String[] POKE_ARRAY = {
                " ♠A "," ♠2 "," ♠3 "," ♠4 "," ♠5 "," ♠6 "," ♠7 "," ♠8 "," ♠9 "," ♠10 "," ♠J "," ♠Q "," ♠K ",
                " ♣A "," ♣2 "," ♣3 "," ♣4 "," ♣5 "," ♣6 "," ♣7 "," ♣8 "," ♣9 "," ♣10 "," ♣J "," ♣Q "," ♣K ",
                " ♥A "," ♥2 "," ♥3 "," ♥4 "," ♥5 "," ♥6 "," ♥7 "," ♥8 "," ♥9 "," ♥10 "," ♥J "," ♥Q "," ♥K ",
                " ♦A "," ♦2 "," ♦3 "," ♦4 "," ♦5 "," ♦6 "," ♦7 "," ♦8 "," ♦9 "," ♦10 "," ♦J "," ♦Q "," ♦K "
        };
    
        static {
            POKES.addAll(Arrays.asList(POKE_ARRAY));
        }
    
    
    
        /**
         * 洗牌
         */
        private static void shuffle(){
            //简单洗牌,利用随机数交换两数位置,表示洗牌
            for (int i = 0; i < POKES.size(); i++) {
                int index = (int) ((Math.random() * 52));
                String currentElement = POKES.get(i);
                POKES.set(i,POKES.get(index));
                POKES.set(index,currentElement);
            }
        }
    
    
    
    
    
        public static void main(String[] args) {
            Gamer gamerOne = new Gamer("张三");
            Gamer gamerTwo = new Gamer("李四");
            Gamer gamerThree = new Gamer("王五");
            Gamer gamerFour = new Gamer("趙六");
            List<String> gamerOnePokes = gamerOne.getPokes();
            List<String> gamerTwoPokes = gamerTwo.getPokes();
            List<String> gamerThreePokes = gamerThree.getPokes();
            List<String> gamerFourPokes = gamerFour.getPokes();
            shuffle();
    
            Thread executor = new Thread(
                    () -> {
                        //利用AtomicInteger自增 等同于i++ (只不过是线程安全的)
                        AtomicInteger index = new AtomicInteger(0);
                        //循环条件是当扑克总量-4大于等于自增下标时进入循环体(-4代表一轮)
                        while(POKES.size()-4 >= index.get()){
                            gamerOnePokes.add(POKES.get(index.getAndIncrement()));
                            gamerTwoPokes.add(POKES.get(index.getAndIncrement()));
                            gamerThreePokes.add(POKES.get(index.getAndIncrement()));
                            gamerFourPokes.add(POKES.get(index.getAndIncrement()));
                        }
                    }
            );
            executor.start();
    
            //等待线程结束
            while(executor.isAlive()){
            }
            gamerFourPokes.forEach(
                    System.out::print
            );
            System.out.println();
            gamerThreePokes.forEach(
                    System.out::print
            );
            System.out.println();
            gamerTwoPokes.forEach(
                    System.out::print
            );
    
            System.out.println();
            gamerOnePokes.forEach(
                    System.out::print
            );
    
        }
    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥40 求一款能支持ios15以上的屏蔽越狱插件。比较好用的
  • ¥15 C++ QT对比内存字符(形式不定)
  • ¥30 C++第三方库libiconv 远程安装协助
  • ¥15 https://github.com/youlaitech/vue3-element-admin/blob/master/src/store/modules/user.ts 这2句代码如何理解
  • ¥15 duilib开发文本字串超过长度显示
  • ¥20 mysql的.ibd文件为啥那么多
  • ¥15 C++中采用栈和BFS算法求解迷宫问题
  • ¥15 关于#java#的问题:这是跳转失败出现的界面这是哪个出现问题的servlet(开发工具-ide)
  • ¥15 EBS R12费用采购跨月冲销
  • ¥15 python中用mplfinance如何做到多股同列?