我最近尝试玩二十一点游戏,但是每当我的牌组抽出一张 A 时,它都会根据我手中的牌的总值(value)自动为 A 分配 11 的值,而不是 1 的值。
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;
}
}
最佳答案
aces 的值永远不会被修改,因此 switch
之后的循环不会执行任何操作。
在开关
中,
如果该牌是 ACE
,
你不想加11。
您想要增加 aces
中 A 的数量,
并让下一个循环完成其工作。
也就是说,这一行更改应该可以修复您的程序:
case ACE: aces++ ; break;
关于java - 使用 for 循环修复 switch 语句的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47605659/