Java 我应该如何着手制作一种方法,来比较扑克牌游戏中的牌数并返回最好的牌数?

Java 我应该如何着手制作一种方法,来比较扑克牌游戏中的牌数并返回最好的牌数?,java,Java,我需要用这样的一行开始这个方法: publicstatichandschoosebesthand(arraylisthands)抛出handException{ 我只需要一些提示。 编辑:我有一个例外的原因是因为两手绑在一起的事件。你要求提示,所以我不会提出代码 首先,您需要定义套装、卡和手类 然后,您需要一个类(理想情况下是一个枚举),该类列出所有类型的扑克牌,并使用方法来识别它们并比较相同类型的两只牌 然后,您可以定义一个比较器,该比较器通过比较双手的类型来比较双手,或者,如果双手的类型相

我需要用这样的一行开始这个方法:
publicstatichandschoosebesthand(arraylisthands)抛出handException{

我只需要一些提示。
编辑:我有一个例外的原因是因为两手绑在一起的事件。

你要求提示,所以我不会提出代码

  • 首先,您需要定义
    套装
  • 然后,您需要一个类(理想情况下是一个枚举),该类列出所有类型的扑克牌,并使用方法来识别它们并比较相同类型的两只牌
  • 然后,您可以定义一个
    比较器
    ,该比较器通过比较双手的类型来比较双手,或者,如果双手的类型相同,则调用该类型的方法来比较双手
  • 您的
    chooseBestHand
    变得相当简单:使用定义的比较器进行排序,然后使用第一个比较器。如果与第二个比较器进行比较时返回0,则抛出异常

我的方法是编写一组分类方法:isStraightFlush(Hand h)返回true(如果手是直齐平的),isFourOfAKind(Hand h)返回true(如果手是一种类型的四个),等等,一直到isPair(Hand h)

然后我将编写一组比较方法:CompareStrightFlushs(ArrayList hands)比较已被标识为直接flushs的指针列表,CompareForofaKinds(ArrayList hands)比较已确定为四种类型的手牌列表等。不要忘记,在您的CompareTowPairs、comparePair和compareHighCard方法中,您还必须分别查看1、3和4张“kicker”牌。(注意,即使有两张“未使用的”牌,您也不必在CompareThreofAid中查看kicker。)(手里拿着卡片。)

我可能还会编写一个助手方法findHighCard(Hand h,Boolean isStraight),返回手牌中最高的牌的值,但是如果isStraight参数为true,并且手牌包含一个Ace,则必须检查手牌是否也包含一个King,以确定该Ace是用作high还是low


<> P>当然还有更多的细节要考虑,但是一旦你有了你的分类器和比较方法,就只需要对每只手调用直通,看看你得到多少点击量。如果一只手返回真的,那就是你的赢家。如果两个或多个返回真,那么你需要调用简单的FLUSH。(ArrayList hands),它返回的那一个是赢家。如果IsTaightFlush没有指针返回true,那么您将继续为每只指针调用isFourOfAKind,并且您将继续这样做,按降序调用分类器方法,直到您获得至少一个命中,如果您获得多个命中,则调用比较方法。

我的提示是编写取而代之的是一个
比较器
。当两只手绑在一起时不要抛出异常。使它们具有可比性并返回0。@cricket\u 007这没有多大意义。该方法不是比较器。它使用比较器返回最佳手。返回null或Optional.empty()可能有意义如果没有最佳手牌,但如果您正在比较列表,则返回0是没有意义的。@sprinter我正在修改前面关于比较器的评论,以回答问题的最后一部分。手牌相等时不应抛出异常。手牌是一张牌的列表。就我个人而言,抛出异常意味着发生了错误艾德,这对我来说没有意义,因为平手在扑克中是一个分裂的壶。