比较Java中的扑克手

问题描述 投票:1回答:5

我正在玩扑克游戏。到目前为止,我还停留在比较扑克手上。我对如何实现有一个想法,但是我不确定我的代码有什么问题。有人可以指出出什么问题吗?

因此,让我简要说明我的代码在做什么。

我程序的另一部分将遍历我手中的卡,并在数组中列出卡值的频率。

h = Hearts
c = Clubs
d = Diamonds
s = Spades
d4 = 4 of Diamond

因此,我手里有c3,h4,d4,s4、2d我将调用程序的另一部分,以读取手中的卡并返回一个计数板。上面我的手的计数板块将为[0,0,1,1,1,3,0,0,0,0,0,0,0,0,0,0]有一个1、2、3和3个4。

现在是我尝试查找一种三的方法,如果满员,它应该返回false(这是一种三加一对)

public boolean hasThreeOfAKind() {
    int [] temp;
    temp = this.getCounts();
    for (int i = 0; i< temp.length; i++){
        if (temp [i] == 3 ){
            for (int j = 0; j < temp.length ; j++)
                if ( temp [j] != 2){
                    return true;
                }
        }
    }return false;

因此,我在上面尝试做的事情是首先运行数组,如果有,则运行3。如果有3,则再次运行数组,并查看是否存在2。不是2,那么我知道这是3。如果有2,则表示已满员,我应该返回false。我认为我的逻辑是正确的,但是我的代码有问题。

而我遇到麻烦的另一只手是如何确定我的手是否有一对。如果只有一对,则仅返回true。如果有两对,则返回false。

public boolean hasOnePair() {
    int [] temp;
    temp = this.getCounts();

    for (int i = 0; i< temp.length; i++){
        if (temp [i] == 2 ){
            return true;
        }
    }return false;

为此,我正在考虑按降序或升序对数组中的值进行排序。如果选择降序,则首先读取数组,看是否有2,然后可以扫描下一个,并查看前2个后的下一个值是否也是2。如果还有2,则它会返回false。

有人可以看看我的代码并指出出什么问题吗?非常感谢你。

我正在玩扑克游戏。到目前为止,我还停留在比较扑克手上。我对如何实现有一个想法,但是我不确定我的代码有什么问题。有人可以指出是什么...

java arrays poker
5个回答
2
投票

hasThreeOfAKind()中,您遇到以下错误:


4
投票

您为什么要使用这样的低级基元?您没有使用完整的Card类是有原因的吗?您的代码会简单得多。


0
投票

在您的threeOfAKind方法中,除非存储在数组中的第一个数字为2,否则第二个for循环将只执行一次,它应该看起来像这样:


0
投票

寻找每个相似卡的数量并排列。 SO卡{1,1,2,2,2,5,7}(现在暂时忽略西服)将映射到(3,2,1,1),即满屋子您可以轻松检查第二个阵列


0
投票

我正在为儿子上大学的Java课程(我曾经教过的课程)解决类似的问题,这是我的建议。


推荐问答