2012-03-26 7 views
0

私のBlackjackアプリケーションでは、NSMutableArrayである手の値を取得する以下のメソッドがあります。ここで問題となるのは、2つのエースが手に入っているときは12でなければなりませんが、エースを11とカウントするため22になり、結果としてlowValueが返されます。NSMutableArrayの重複オブジェクトの値を変更しますか?

forループで既にAceが見つかっているかどうかを確認し、別のものを見つけたら、次のAceを11ではなく1にすることができます。

ありがとうございます!

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

あなたがACEを探しているかどうかを保存するために「BOOL isFindAce」を追加することができます。 – zsxwing

+0

@zsxwingだから、もし私がhighValueの下にBOOLを置いて、その値がAceならばBOOLをtrue/yesに設定し、別のAceが現れたならtrue/yesを読んで1に値するでしょうか? – Alec

答えて

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

+0

私はコードの入力を終了し、あなたが入れたものをほぼ正確に探し出しました!ありがとうzsxwing! – Alec

1

おそらく、最初にNOに設定するforループの前にブール値を追加できます。 Aceが見つかったら、ブール値をYESに設定した後でforループを終了することができます。別のAce & &ブール値== YESになると、それに応じてケースを処理できます。例をzsxwingから冗長コードなし

+0

これは私が以前考えていたものですが、効率的かどうかは分かりませんでした。今、書面で聞いてみると、それははっきりと聞こえます。おかげでタムズ! – Alec

+0

@AlecK。問題はありません、私は助けることができてうれしいです:) – tams

0

私の例:

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; 
} 
関連する問題