2017-12-02 6 views
0

最近、私はデッキがエースを引くたびに、自動的にエースに11の値を割り当て、1の値ではなく私の手札にあるカードの合計金額。 switch後のループは何もしませんので、forループを使用してswitch文の戻り値を固定する

public class Deck { 

private ArrayList<Card> cards; 

public Deck(){ 
    this.cards = new ArrayList<Card>(); 
} 
public int valueOfCards(){ 
    int totalValue = 0; 
    int aces = 0; 

    for(Card aCard : this.cards){ 
     switch(aCard.getValue()){ 
     case TWO: totalValue += 2; break; 
     case THREE: totalValue += 3; break; 
     case FOUR: totalValue += 4; break; 
     case FIVE: totalValue += 5; break; 
     case SIX: totalValue += 6; break; 
     case SEVEN: totalValue += 7; break; 
     case EIGHT: totalValue += 8; break; 
     case NINE: totalValue += 9; break; 
     case TEN: totalValue += 10; break; 
     case JACK: totalValue += 10; break; 
     case QUEEN: totalValue += 10; break; 
     case KING: totalValue += 10; break; 
     case ACE: totalValue += 11 ; break; 
     } 
    } 
    for(int i = 0; i < aces; i++){ 
     if(totalValue > 10){ 
      totalValue += 1; 
     } 
     else{ 
     totalValue += 11; 
     } 
    } 
return totalValue; 
} 
} 
+1

に減少し、?????????? ? – yashpandey

+0

ユーザハンドがすでに11以上であればエースの値を1にしようとしていた – simplest

+0

[mcve]を投稿して無駄な部分を削除してください(最後のforループのように)考えられるヒント: 'aces = 0 'いつも –

答えて

1

acesの値は、変更されることはありません。 switch

、 カードがACEであれば、 あなたは、acesでエースの数をインクリメント し、次のループはその仕事をやらせたい11 を追加する必要はありません。ある

、この単一の行の変更は、あなたのプログラムを修正する必要があります。それはない最初のループでエースを数えることになっているよう

case ACE: aces++ ; break; 
1

さて、あなたのコードが見えます。後のループのエースカウントをインクリメントするには、

case ACE: totalValue += 11; aces++; break; 

のようなものを実行することをお勧めします。 は、しかし、私は最初のエースは終わりであることを確認するためにその価値によってカードを並べ替えることが容易になるだろうと思うだろう、そしてあなただけ

case ACES: totalValue += (totalValue > 10) ? 1 : 11; 

を行うことができますし、完全に第二のループを除外します。

ところで、あなたは同様にあなたの「価値」列挙型を与えるかもしれない部材及び方法

public enum CardValue { 
    TWO(2), THREE(3), // and so on 

    private int value; 
    private CardValue(int value) { this.value = value; } 

    public int getValue(int currentHandValue) { 
     if (this == ACE) { 
      return currentHandValue > 10 ? 1 : 11; 
     } 
     return value; 
    } 
} 

ので、あなたの現在のコードは

// make sure aces are at the end 
List<Card> sorted = new ArrayList<>(cards); 
Collections.sort(sorted, Comparator.comparing(Card::getValue)); 
int totalValue = 0; 
for (Card c : sorted) { 
    totalValue += c.getValue(totalValue); 
} 
return totalValue; 
関連する問題