java - 为 N 名玩家生成一手牌(每手五张牌)

标签 java poker

问题:编写一个程序 Deal.java,它采用命令行参数 N 并从洗好的牌中打印 N 手扑克牌(每手五张牌),中间用空行分隔。

我有:

public static void main(String[] args)
{
    int N = Integer.parseInt(args[0]);


    String[] suit = { "Clubs", "Diamonds", "Hearts", "Spades" };
    String[] rank = 
    { 
        "2", "3", "4", "5", "6", "7", "8", "9", "10", 
        "Jack", "Queen", "King", "Ace" 
    };

    // initialize cards in a deck
    String[] deck = new String[suit.length * rank.length];
    for (int i = 0; i < rank.length; i++)
        for (int j = 0; j < suit.length; j++)
            deck[rank.length*i + j] = rank[i] + " of " + suit[j];

    // shuffle deck
    int d = deck.length;
    for (int i = 0; i < d; i++)
    {
        int r = i + (int) (Math.random() * (d-i));
        String temp = deck[r];
        deck[r] = deck[i];
        deck[i] = temp;
    }

    // repeat for N number of people
    for (int t = 0; t < N; t++)
    {
        // print 5 random cards
        for (int i = 0; i < 5; i++)
            System.out.print(deck[i] + " ");
        System.out.println();
    }   


} 

有人能告诉我我在这里做错了什么吗?我收到错误 ArrayIndexOutOfBoundsExceptions,不知道为什么。这是我书中练习集的问题,而不是家庭作业。

最佳答案

我假设您在这一行遇到数组索引越界异常:

deck[rank.length*i + j] = rank[i] + " of " + suit[j];

你的意思一定是这样的:

deck[suit.length*i + j] = rank[i] + " of " + suit[j];

关于java - 为 N 名玩家生成一手牌(每手五张牌),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9351625/

相关文章:

java - Android Emulator(调试器不能绑定(bind)本地8601)

java - DataTables 的 JSON 数据中缺少根元素

java - 比较器接口(interface)

c# - 生成一手扑克牌的所有不同的 7 张牌组合?

java - 如何打印我的扑克牌?

java - 简单教程示例(lambda 表达式)不运行

java - ProcessBuilder 在 Mac 上给出 "No such file or directory"而 Runtime().exec() 工作正常

c - 尝试使用扑克游戏的冒泡排序方法对 C 中的值进行排序

excel - 扑克经销商逻辑

algorithm - 一种高效的高效算法,可以找到 N 张牌的所有可能手牌? (OFC幻想世界)