Изменить значение дубликата объекта в NSMutableArray? - PullRequest
0 голосов
/ 26 марта 2012

У меня есть метод ниже, который в моем приложении Блэкджек получит значение руки, которая является NSMutableArray.Проблема здесь в том, что когда в руке 2 туза, это должно быть 12, но, поскольку он считает туза как 11, получается 22, что возвращает lowValue.

Как я могу сделать это?так что я могу проверить и посмотреть, нашел ли цикл for туз, и если он находит другого, делает следующий туз только 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 ]

1 голос
/ 26 марта 2012

Возможно, вы можете добавить логическое значение перед циклом for, установив его изначально в NO.Когда Ace найден, вы можете выйти из цикла for после установки логического значения в YES. Таким образом, если вы встретите другой Ace && ваше логическое значение == YES, вы можете соответственно обработать регистр.

0 голосов
/ 26 марта 2012

Мой пример без избыточного кода из примера 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;
}
0 голосов
/ 26 марта 2012
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;     
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...