You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java通过Scanner输入玩家数实现扑克牌发牌功能求助

解决方案

你已完成的牌组生成、洗牌逻辑无需调整,只需替换最后遍历打印整副牌的代码,新增轮转发牌逻辑即可实现需求。核心发牌逻辑为:洗好的牌按顺序逐张发放,第i张牌(从0开始计数)发给i % 玩家数量对应的玩家,即可实现你要求的轮流发牌效果。

完整修改后代码

import java.util.Scanner;
import java.util.ArrayList;
import java.util.List;

public class main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("Please Input how many players there are");
        
        int player = sc.nextInt();
        
        // 可选新增:限制玩家数1-52,避免出现玩家数大于牌数有玩家拿不到牌的情况
        if (player > 0 && player <=52) {
            // 调整花色、点数命名和你示例输出保持一致
            String[] type = {"Spade-", "Heart-", "Diamond-", "Club-"} ;
            String[] rank = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};
            String[] cset = new String[52];
            
            for (int i = 0; i < cset.length; i++) {
                cset[i] = type[i/13] + rank[i%13];
            }
            // 原有洗牌逻辑保留
            for (int i = 0; i < cset.length; i++) {
                int index = (int) (Math.random() * cset.length);
                String temp = cset[i];
                cset[i] = cset[index];
                cset[index] = temp;
            }
            
            // 初始化每个玩家的手牌存储列表(如果需要后续单独使用玩家手牌可保留,不需要可以删除)
            List<String>[] playerHands = new List[player];
            for (int i = 0; i < player; i++) {
                playerHands[i] = new ArrayList<>();
            }

            // 替换原有打印整副牌的逻辑,改为发牌输出
            for (int i = 0; i < cset.length; i++) {
                int currentPlayerNum = (i % player) + 1;
                // 处理玩家序号后缀
                String suffix;
                switch (currentPlayerNum) {
                    case 1: suffix = "st"; break;
                    case 2: suffix = "nd"; break;
                    case 3: suffix = "rd"; break;
                    default: suffix = "th";
                }
                // 发牌存入对应玩家手牌
                playerHands[i % player].add(cset[i]);
                // 格式化输出,牌面左对齐占12位,和示例效果一致
                System.out.printf("%-12s%d%s player%n", cset[i], currentPlayerNum, suffix);
            }
        } else {
            System.out.println("Please input a correct number of player/s (1-52)");
        }
        sc.close();
    }
}

内容的提问来源于stack exchange,提问作者user17204708

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 03:36:04