2012-03-26 63 views
0

我有下面的方法,在我的Blackjack應用程序中將獲得這是一個NSMutableArray的手的值。這裏的問題是,當2個Ace在手中時,它應該是12,但是因爲它將Ace的值計爲11,結果是22,這使得低值返回。更改NSMutableArray中重複對象的值?

我該如何做,以便我可以檢查並查看for循環是否已經找到一個Ace,如果找到另一個,使下一個Ace只值1,而不是11?

謝謝!

int getHandValue(NSMutableArray *hand) { 
    int lowValue = 0; 
    int highValue = 0; 

    for (KCCard *aCard in hand) { 
      if (aCard.value == Ace) { 
       lowValue+= 1; 
       highValue+= 11; 
      } else if (aCard.value == Jack || aCard.value == Queen || aCard.value == King) { 
       lowValue += 10; 
       highValue += 10; 
      } else { 
       lowValue += aCard.value; 
       highValue += aCard.value; 
      } 
    } 

    return (highValue > 21) ? lowValue : highValue;  
} 
+0

您可以添加一個「BOOL isFindAce」來拯救你是否有找到一個ACE。 – zsxwing 2012-03-26 05:21:33

+0

@zsxwing所以如果我把一個BOOL置於int highValue之下,並且當這個值是一個Ace時,將BOOL設置爲true/yes,並且如果有另一個Ace出現,它會讀取true/yes,並使其值爲1? – Alec 2012-03-26 05:22:57

回答

0
int getHandValue(NSMutableArray *hand) { 
    int lowValue = 0; 
    int highValue = 0; 
    BOOL isFoundAce = NO; 

for (KCCard *aCard in hand) { 
     if (aCard.value == Ace) { 
      if (isFoundAce) { 
       lowValue+= 1; 
       highValue+= 1; 
      } 
      else { 
       lowValue+= 1; 
       highValue+= 11; 
       isFoundAce= YES; 
      } 

     } else if (aCard.value == Jack || aCard.value == Queen || aCard.value == King) { 
      lowValue += 10; 
      highValue += 10; 
     } else { 
      lowValue += aCard.value; 
      highValue += aCard.value; 
     } 
} 

return (highValue > 21) ? lowValue : highValue;  
} 
+0

對不起,我沒有編譯這段代碼。這只是一個例子。 – zsxwing 2012-03-26 05:25:59

+0

我輸完了代碼,它看起來幾乎完全是你放的!謝謝zsxwing! – Alec 2012-03-26 05:26:21

1

也許你可以在for循環之前添加一個布爾值,將它初始設置爲NO。當找到一個Ace時,你可以在將布爾值設置爲YES之後從for循環中斷開,這樣如果你遇到另一個Ace,你的布爾值== YES,你可以相應地處理這個事件。

+0

這就是我以前的想法,但不知道它是否有效。現在,以書面形式聽證會聽起來很清楚。感謝Tams! – Alec 2012-03-26 05:24:56

+0

@AlecK。沒問題,很高興我能幫到:) – tams 2012-03-26 05:27:16

0

我沒有多餘的代碼示例從zsxwing的例子:

int getHandValue(NSMutableArray *hand) { 
    int cardValue = 0; 
    int aceCount = 0; 
    for (KCCard *aCard in hand) { 
     if (aCard.value == Ace) { 
      aceCount++; 
      cardValue += 11; 
     } else if (aCard.value == Jack || aCard.value == Queen || aCard.value == King) { 
      cardValue += 10; 
     } else { 
      cardValue += aCard.value; 
     } 
    } 
    while ((cardValue > 21) && (aceCount > 0)) { 
     cardValue -= 10; 
     aceCount--; 
    } 
    return cardValue; 
}