Я видел эту проблему на днях (пока болел). С тех пор я спорю о перезвоне. С одной стороны, это похоже на домашнюю работу. (Это простая проблема. Ваш код сложен для понимания, что свидетельствует об отсутствии опыта.)
С другой стороны, я не против помочь. Я не собираюсь делать вашу работу за вас, но я могу указать вам правильное направление ...
Первый шаг: Определите проблему. После четкого определения ответы становятся гораздо более простыми.
A «фулл-хаус» , предположительно 5 карт, состоящих из трех в своем роде плюс пара. Предположительно, это игра с одной колодой. Предположительно, это стандартная колода (Ace, 2,3,4,5,6,7,8,9, Jack, Queen, King) с мастями (пики, трефы, червы, бубны). (Сокращено ниже как (A23456789JQK) и (SCHD).)
Вы упомянули 3700 комбинаций. Предположительно поэтому вы рассматриваете руки (2S, 2C, 2H, 3H, 3D) и (3D, 3H, 2H, 2C, 2S) как эквивалентные, а не отличные. (Это на самом деле довольно важный момент, о котором говорил Шон и Loadmaster в своих комментариях. Существует 311 875 200 (52 * 51 * 50 * 49 * 48) возможных 5-карточных рисунков. Однако только 2 598 960 из этих рук различны!)
У нас есть (13 * 4) возможные тройки. Например. Для каждой карты ранга (например, 3) у нас может быть 4 тройки ({0S, 3C, 3H, 3D}, {3S, 0C, 3H, 3D}, {3S, 3C, 0H, 3D }, {3S, 3C, 3H, 0D}). (Возможно, вы начинаете замечать закономерность: 0111 1011 1101 1110.)
Дайте нашу тройку в своем роде, и, предполагая, что это игра с одной колодой и стандартной колодой, наша пара должна быть одним из 12 оставшихся рядов карт. Для каждого ранга карты есть шесть возможностей для пары. Например. Если бы у нас был рейтинг карты 7, мы могли бы иметь ({7S, 7C, 0H, 0D}, {7S, 0C, 7H, 0D}, {7S, 0C, 0H, 7D}, {0S, 7C, 7H, 0D} {0S, 7C, 0H, 7D}, {0S, 0C, 7H, 7D}). (Опять же, возможно, вы заметили шаблон: 1100 1010 1001, 0110 0101, 0011.)
Это дает нам 13 * 4 * 12 * 6 = 3744 комбинаций.
Отсюда просто зацикливаться, чтобы распечатать их.
Я предлагаю вам рассмотреть более описательные имена переменных. Хотя есть места и время для использования односимвольных переменных цикла, это не одна из них. Хорошо написанный код почти самодокументируется, что позволяет сосредоточиться на более сложных абстракциях более высокого уровня. Несколько лишних символов, которые вы сохраните, обойдутся вам в целую кучу времени на отладку. При желании вы можете быть ленивым, как я, изучать emacs, использовать (требовать 'завершение), (global-set-key "\ C - \\"' завершить), набрать первые несколько символов и позволить автозаполнению emacs для вас .
Я предлагаю вам подумать о поддержке и, возможно, о частных методах. Например, вы можете сделать что-то вроде: (Прошло много времени с тех пор, как я последний раз программировал на Java.)
for ( suit = 0; suit < 4 ; ++ suit )
private_printThreeOfAKind( card, suit!=0, suit!=1, suit!=2, suit!=3 )
Три из них (! =) Были бы верными, один - ложными.
Что касается печати пар, вы можете захотеть изучить оператор continue . Ссылка: http://en.wikipedia.org/wiki/Java_syntax#continue_statement
например. Это позволит вам пропустить случай, когда парная карта того же ранга, что и тройка:
if ( threeOfAKindCard == pairCard )
continue;
Я предлагаю вам собрать ваше программное обеспечение по частям. Попытка построить полную систему редко работает, даже для экспертов. Соберите детали, протестируйте их, промойте, повторите. Да, это означает написание кода скаффолдинга, который вы не включите. Возможно, даже подкласс тестирования ... Но с небольшими шагами легче начать работать. По мере того, как вы станете программистом, вы сможете делать большие шаги ...