更改NSMutableArray中重复对象的值?

时间:2012-03-26 05:08:45

标签: iphone objective-c ios

我有下面的方法,在我的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;     
}

3 个答案:

答案 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;
}