Java - 确定是扑克之手有一对

时间:2017-04-27 12:26:44

标签: java poker

我试图评估一只手,看看他们是否有一对,我觉得这是对的,但我一直都会遇到错误。关于我做错什么的任何想法?

 Boolean isSuccess = true;
    if(aMap.size() != bMap.size())
    {
        return false;
    }

    aMap.entrySet().forEach(entry -> {
        AKey aKey = entry.getKey();
        BValue bValue = bMap.get(aKey);

        if(bValue == null)
            return;

        AValue aValue = entry.getValue();
        if(!aValue.getClosed().equals(bValue.getClosed()))
            return;

        if(!aValue.getClosedToArrival().equals(bValue.getClosedToArrival()))
            return;

        if(!aValue.getClosedToDeparture().equals(bValue.getClosedToDeparture()))
            return;

        if(!aValue.getLengthOfStayArrival().equals(bValue.getLengthOfStayArrival()))
            return;
    });

    return isSuccess;

2 个答案:

答案 0 :(得分:0)

我能看到的第一个明显的错误是你在这里比较第一张卡片本身:

for(int j = 0; j < values.length; j++){
        for(int k = 0; k < cards.length; k++){

如果等于j,则不应验证索引k。

其次,当您打算创建一个包含手的String数组时,为什么在比较中使用变量“hand”?

values[j].equals(cards[k].toString())

你可以写:

values[j].equals(values[k])

我不认为它对任何错误负责,但更容易理解。

最后,你的柜台是假的。根据定义,一对具有相同值的两张牌。因此,您必须检查一个值是否仅存在两次(即1次相等)。

所以你会:

for(int j = 0; j < values.length; j++){
    for(int k = 0; k < cards.length; k++){
        if(k!=j){
            if(values[j].equals(values[k]))
                counter ++;
        }
    }
    if (counter ==1 ) //Counter==1 means the a value matched with an other value in your hand only once, involving one pair.
        return true;
    else counter = 0;

}

return false;

答案 1 :(得分:-1)

String[] values = new String[5];

应该是

String[] values = new String[cards.length];

但是,最好不要使用values,因为它几乎是cards的副本。