2016-02-04 85 views
1

我正在制作一个扑克手代码,用于查找手中的各种扑克牌。我在实施每种方法后正在写测试。Java PokerHand方法

我写了isFlush()代码,它测试手是否齐平。

public boolean isFlush() 
{ 

for (int i = 0; i < 4; i++) 
{ 
    if (cards.get(i).getSuit() == cards.get(i + 1).getSuit()) 
    { 
     return true; 
} 
    } 
    return false; 
} 

这是相应的测试,其成功构建,但测试实际上失败。它说预计会失败,但这是事实。我在代码中做了什么错误,但没有正确测试刷新?

@Test public void testIsFlush() 
{ 

pokerHand.add(aceClubs); 
pokerHand.add(kingSpades); 
pokerHand.add(threeClubs); 
pokerHand.add(fourClubs); 
pokerHand.add(fiveClubs); 

assertEquals(false, pokerHand.isFlush()); 
} 
+1

getSuit()返回什么样的值?此外,只要两张相邻的牌是相同的花色,您的isFlush()函数就会返回true。 – djebeeb

+0

它返回“C,D,H,S”一个字符串,我如何让它检查所有5张牌? @djebeeb – soph16578

+0

您的真/假条件是落后的:您应该尽早在任何不匹配情况下返回false,并且只有在循环结束时才返回true。 –

回答

0

我假设西装是一个字符串..所以会比较它们与等于方法==。 另一方面,你的方法,如果前两张牌有相同的西装将永远返回总是真的没有检查其他卡...你应该重写该方法,然后再试一次。

-1

for (int i = 0; i < 4; i++)只需检查前4张卡片,您需要5张卡片才能冲洗。

if (cards.get(i).getSuit() == cards.get(i + 1).getSuit()) 
    { 
     return true; } 
    } 
    return false; } 

这将检查只是前两张牌,因为它只是检查卡0和1

而且后立即返回,如果你正在检查的西装为字符串,你应该使用String.equals()

编辑:根据要求,我会提供一个代码示例。

public boolean isFlush() 
{ 

boolean condition=true; 
for (int i = 0; (i <4)&&condition; i++) 
{ 
    if (!(cards.get(i).getSuit() == cards.get(i + 1).getSuit())) 
    { 
     condition=false; 
    } 

    } 
return condition;} 
+0

您只需要4次比较;一张牌的牌总是一个“同花”牌,因为所有的牌都适合。 – ataylor

+0

问题仍然存在,但是,他在第一次迭代中返回。 – Wazowski

+0

如何在检查所有5张卡之后编辑它以返回? @Wazowski – soph16578

0

您只检查第一张和第二张卡,因为您立即返回true。检查所有的卡和and的值在一起。

3
public boolean isFlush() 
{ 
    for (int i = 0; i < 4; i++) 
    { 
     if(!cards.get(i).getSuit().equals(cards.get(i + 1).getSuit())) 
     { 
      return false; 
     } 
    } 
    return true; 
} 

它更好地检查连续两张牌是否不相等。