public static ArrayList<Hand> getPossibleHands(Hand h) {
ArrayList<Hand> allPossible = new ArrayList<Hand>();
addNext(allPossible, h);
return allPossible;
}
public static void addNext(ArrayList<Hand> poss, Hand h) {
if (h.cards.size() == 5)
poss.add(h);
else
for (int i = 0; i < 52; i++) {
Card c = Card.makeCard(i);
if (!h.contains(c))
h.add(c);
addNext(poss,h);
}
}
上記のコードは、基本的に不完全なポーカーボード(0-4カードのいずれか)を取って、可能なすべての完全なボード(5枚のカード)を返すことになっています。私がそれが続くべきであると感じるロジックは以下の通りです:ボードのサイズが5に等しくなるまで有効な(ボード上ではない)カードを追加するすべての組み合わせを繰り返します。この場合、ボードをリストに追加し、残りの機能はスキップしてください。私のポーカーゲームの再帰ロジックをデバッグするには?
しかし、関数の最初にprintステートメントを使用すると、手のサイズが5より大きいか、作成されていることがわかります。関数の最初の部分は5ですべての手をキャッチしてそこで終了する必要があるので、残りの関数でコードがどのように実行されるかわかりません。
は、カードの順番は重要ですか?つまり、カードの順番が異なるだけであれば、2本の手は区別されますか? –
@Scott Hunterいいえ、注文は関係ありません –