Java:扑克手

Posted

技术标签:

【中文标题】Java:扑克手【英文标题】:Java: Poker Hand 【发布时间】:2014-11-04 15:54:29 【问题描述】:

所以,我必须使用函数/方法和数组创建一个扑克手程序。

这是我需要的示例输出:

输入五张数字卡,没有人脸卡。使用 2 - 9. 卡片 1:8

卡 2:7
卡 3:8
卡 4:2
卡 5:7
两对!

输入五张数字卡,没有人脸卡。使用 2 - 9。
卡 1:4
卡 2:5
卡 3:6
卡 4:8
卡 5:7
直的!

输入五张数字卡,没有人脸卡。使用 2 - 9。
卡 1:9
卡 2:2
卡 3:3
卡 4:4
卡 5:5
高卡!

这是我的代码(我在确定一个是否配对、3 个等方面存在逻辑问题)。它们是方法/功能。所以,如果我能弄清楚如何做其中的 1 或 2 个,那应该是轻而易举的事:

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!");   

这是作业说明中推荐的方式:

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;

如果需要更多信息,我将非常乐意提供。谢谢!

【问题讨论】:

你的问题是什么 那么在// Your code here... don’t return true every time... 的那一点上,你尝试了什么? 一个附带问题:您应该组织检查,以便它们按价值的降序排列,而不是复杂性。现在,您在检查完葫芦或顺子之后检查四个同类,但四个同类都击败了这两者。 【参考方案1】:

我建议您对手牌的内容进行计数,而不是对手牌进行排序,并生成一个计数数组,其中数组的 ith 元素具有与值i。然后,您应该能够弄清楚如何使用该数组来确定它是否是特定类型的手。

【讨论】:

【参考方案2】:

由于这是家庭作业,我会为您指明一个开始的方向,以帮助您考虑解决方案。

在您的帖子中,您需要为containsFullHouse()containsStraight() 等创建代码。所以……

拿一副牌。删除面牌和 A。 想象一下你在玩扑克。给自己一只手,这是一种四。想想你,作为一个人,将如何决定你拥有什么。我会亲自sort我的手,然后计算每张牌的发生率。如果我有 4 个相同的值,那么我有一个 4 个并且可以停止。 好的,现在是顺子。我会再次整理我的手。如果每张牌c 都有c + 1 作为下一张牌的价值,除了最后一张,我有顺子。 重复这个过程,直到你找到价值最低的牌。

【讨论】:

以上是关于Java:扑克手的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 2347. 最好的扑克手牌

LeetCode 2347. 最好的扑克手牌

如何在python中打印用户友好的扑克手?

python 扑克手Generator.py

生成所有 5 张牌扑克手

一场改变你投资生涯的讨论:职业德州扑克手看交易