Java 为N个玩家生成扑克牌(每张5张)

Java 为N个玩家生成扑克牌(每张5张),java,poker,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 = {

问题:编写一个程序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();
    }   


} 
publicstaticvoidmain(字符串[]args)
{
int N=Integer.parseInt(args[0]);
字符串[]套装={“梅花”、“钻石”、“红心”、“黑桃”};
字符串[]秩=
{ 
"2", "3", "4", "5", "6", "7", "8", "9", "10", 
“杰克”、“女王”、“国王”、“王牌”
};
//初始化牌组中的牌
String[]deck=新字符串[suit.length*rank.length];
for(int i=0;i

有人能告诉我我做错了什么吗?我在BoundsCeptions的索引数组中得到一个错误,不知道为什么。这是我书中的一个练习集的问题,而不是家庭作业。

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

deck[rank.length*i + j] = rank[i] + " of " + suit[j];
你一定是这么想的:

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

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

deck[rank.length*i + j] = rank[i] + " of " + suit[j];
你一定是这么想的:

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

除了ruakh发现的索引错误外,您还打印出同一手
N
次:

// 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();
}
//重复N次,人数为
for(int t=0;t
要打印不同的指针,请使用另一个索引变量

// repeat for N number of people
int j = 0
for (int t = 0; t < N; t++)
{
    // print 5 random cards
    for (int i = 0; i < 5; i++, j++)
        System.out.print(deck[j] + " ");
    System.out.println();
}   
//重复N次,人数为
int j=0
for(int t=0;t
除了ruakh发现的索引错误之外,您还打印出了同一手
N
次:

// 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();
}
//重复N次,人数为
for(int t=0;t
要打印不同的指针,请使用另一个索引变量

// repeat for N number of people
int j = 0
for (int t = 0; t < N; t++)
{
    // print 5 random cards
    for (int i = 0; i < 5; i++, j++)
        System.out.print(deck[j] + " ");
    System.out.println();
}   
//重复N次,人数为
int j=0
for(int t=0;t
我看不出问题出在哪里。似乎正常,请尝试提供更多详细信息

你应该改进的是:

检查参数是否在开头正确设置:

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" 
};

    if(N < 0 || N > suit.length * rank.length)
      throw new IllegalArgumentException("A number between 0 and " + suit.length * rank.length + "should be provided as argument");
publicstaticvoidmain(字符串[]args)
{
int N=Integer.parseInt(args[0]);
字符串[]套装={“梅花”、“钻石”、“红心”、“黑桃”};
字符串[]秩=
{ 
"2", "3", "4", "5", "6", "7", "8", "9", "10", 
“杰克”、“女王”、“国王”、“王牌”
};
如果(N<0 | | N>西服长度*军衔长度)
抛出新的IllegalArgumentException(“应提供介于0和“+suit.length*rank.length+”之间的数字作为参数”);

我看不出问题出在哪里。似乎正常,请尝试提供更多详细信息

你应该改进的是:

检查参数是否在开头正确设置:

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" 
};

    if(N < 0 || N > suit.length * rank.length)
      throw new IllegalArgumentException("A number between 0 and " + suit.length * rank.length + "should be provided as argument");
publicstaticvoidmain(字符串[]args)
{
int N=Integer.parseInt(args[0]);
字符串[]套装={“梅花”、“钻石”、“红心”、“黑桃”};
字符串[]秩=
{ 
"2", "3", "4", "5", "6", "7", "8", "9", "10", 
“杰克”、“女王”、“国王”、“王牌”
};
如果(N<0 | | N>西服长度*军衔长度)
抛出新的IllegalArgumentException(“应提供介于0和“+suit.length*rank.length+”之间的数字作为参数”);

你做错了什么:没有给出任何关于什么实际上不起作用的细节。没有总结你为纠正这个问题所做的努力。没有给出任何错误消息。@russ的+1-你需要做一些调试。如果你不能调试,你就不能开发软件。另外,当我交易时,我不会把任何卡片放回包里。我愚弄了你shly认为我的书没有任何打字错误。我应该抓住ruakh纠正我自己的部分你做错了什么:没有给出任何关于什么实际上不起作用的细节。没有总结你为纠正这个问题所做的努力。没有给出任何错误信息。@RussS+1-你需要做一些调试。如果你不能debug,你不能开发软件。而且,当我交易时,我不会把任何卡片放回包装中。我愚蠢地认为我的书没有任何打字错误。我应该抓住ruakh纠正我自己的那部分啊thx!书中有一个打字错误,所以我永远不会猜到(我只是把那部分抄下来)可悲的是,由于2个ppl的票数低于我,我无法投票:(@MarioA.CorcheroJiménez)为什么它不能正常运行?在我看来是正确的。它不能正常运行是因为我读错了,我很抱歉,我的意思是,它完全没问题,我的错啊,谢谢!书中有一个打字错误,所以我永远也猜不到(我只是把那部分抄了下来)遗憾的是,由于2个ppl投票人对我投了反对票,我无法投票:(@MarioA.CorcheroJiménez为什么它不能正常运行?我看是对的。它不能正常运行是因为我读错了,我很抱歉,我的意思是,它完全没问题,我的错虽然它可能不是我想要的答案,但你可能已经回答了我接下来要问的问题!谢谢这是预感:)诚恳地说,你还没有提到这个例外,所以我采取了突如其来的措施。虽然这可能不是我想要的答案,但你可能已经知道了