0

So, I have to create a poker hand program using functions/methods and arrays.

Here's a sample output I need to have:

Enter five numeric cards, no face cards. Use 2 - 9.Card 1: 8 

Card 2: 7
Card 3: 8
Card 4: 2
Card 5: 7
Two Pair!

Enter five numeric cards, no face cards. Use 2 - 9.
Card 1: 4 
Card 2: 5
Card 3: 6
Card 4: 8
Card 5: 7
Straight!

Enter five numeric cards, no face cards. Use 2 - 9.
Card 1: 9
Card 2: 2
Card 3: 3
Card 4: 4
Card 5: 5
High Card!

And here's my code (I'm having issues with logic in determining if one gets pair, 3 of a kind, etc.). They have be methods/functions. So, if I can figure out how to do 1 or 2 of them, it should be hopefully be a breeze from there:

import java.util.Scanner;

public class Assignment4 
{
    public static void main(String args[])
    {
        final int LEN = 5;
        int[] hand = new int[LEN];

    Scanner input = new Scanner(System.in);

    //input the hand
    System.out.println("Enter five numeric cards, no face cards. Use 2-9.");
    for (int index = 0; index < hand.length; index++) {
        System.out.print("Card " + (index + 1) + ": ");
        hand[index] = input.nextInt();
    }

    //sort the collection
    bubbleSortCards(hand);

    //determine players hand type
    //flow of evaluation -> checking complex hands first  
    if (containsFullHouse(hand)) {
        System.out.println("Full House!");
    } else if (containsStraight(hand)) {
        System.out.println("Straight!");
    } else if (containsFourOfaKind(hand)) {
        System.out.println("Four of a Kind!");
    } else if (containsThreeOfaKind(hand)) {
        System.out.println("Three of a Kind!");
    } else if (containsTwoPair(hand)) {
        System.out.println("Two Pair!");
    } else if (containsPair(hand)) {
        System.out.println("Pair!");
    } else 
        System.out.println("High Card!");   
}

And this is the recommended way from the assignment's instructions:

public class PokerHand
{
    public static void main(String args[])
    {
        int hand[] = {5, 2, 2, 3, 8};

        if (containsAPair(hand)) {
                System.out.println("Pair!");
        } else {
                System.out.println("Not a pair!");
        }
}

public static boolean containsAPair(int hand[]) {
        // Your code here... don’t return true every time...
        return true;
}

}

If more information is needed, I'll be more than happy to supply that. THANKS!

user3385997
  • 67
  • 2
  • 12
  • 5
    what is your question – Jay Sep 10 '14 at 20:55
  • 3
    So in the bit that says `// Your code here... don’t return true every time...`, what have you tried? – jdphenix Sep 10 '14 at 20:59
  • 1
    A side issue: you should organize the checks so that they are done in descending order of value, not complexity. Right now, you are checking for four of a kind after checking for a full house or a straight, yet four of a kind beats both of those. – Ted Hopp Sep 10 '14 at 21:02

2 Answers2

1

Instead of sorting the hand, I would recommend that you tally the contents of a hand and generate an array of counts, where the ith element of the array has the number of cards with value i. You should then be able to figure out how to use that array to decide whether it is a particular type of hand.

Ted Hopp
  • 232,168
  • 48
  • 399
  • 521
1

Since this is homework, I'll point you in a direction to get started to help you think about a solution.

In your post, you need to create the code for the containsFullHouse(), containsStraight() and so on. So...

  • Grab a deck of cards. Remove the face cards and aces.
  • Imagine you're playing poker. Give yourself a hand that's a four of a kind. Think about how you, as a person, would determine what you have. I would personally sort my hand, then count the incidences of each card. If I have 4 of the same value, then I've got a four of a kind and can stop.
  • Okay, now a straight. I'd again sort my hand. If every card c has c + 1 as the next card's value, except the last, I have a straight.
  • Repeat this process until you work down to the lowest valued hands.
jdphenix
  • 15,022
  • 3
  • 41
  • 74