2016-02-04 40 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; 
} 

它更好地檢查連續兩張牌是否不相等。