n数のプレイヤー数(それぞれ5枚のカード)のポーカーハンドを生成する
質問
問題:コマンドライン引数nを取得し、空白の行で区切られたシャッフルデッキからnポーカーハンド(それぞれ5枚)を印刷するプログラムdeal.javaを書きます。
私が持っているもの:
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();
}
}
誰かが私がここで何をしているのか教えてもらえますか?私はエラーArrayIndexOfBoundSexceptionsを取得していますが、その理由はわかりません。これは、宿題ではなく、私の本のエクササイズセットの問題です。
解決
この行でArray-Index-out-of-boundsの例外を取得していると思います。
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();
}
別の手を印刷するには、別のインデックス変数を使用してください。
// 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();
}
問題が何であるかがわかりません。さらに詳細を説明してみてください。
改善すべきことは次のとおりです。
パラメーターが最初に適切に設定されていることを確認してください。
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");
所属していません StackOverflow