我有下面的方法,在我的Blackjack应用程序中将获得手的值,这是一个NSMutableArray。这里的问题是,当手中有2个Ace时,它应该是12,但是因为它将Ace计为11,它会导致22,然后返回lowValue。
我怎样才能做到这一点,以便我可以检查并查看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 :(得分:1)
也许您可以在for循环之前添加一个布尔值,将其初始设置为NO。当找到一个Ace时,你可以在将布尔值设置为YES后从for循环中断,如果你遇到另一个Ace&&您的布尔值==是,您可以相应地处理案例。
答案 1 :(得分: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;
}
答案 2 :(得分: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;
}