我正在编写一个到目前为止的二十一点游戏,它应该做什么,除了处理何时以及如何将ace计为1或11.我有两种方法我已经尝试过了。他们是:
public static int calcScore(ArrayList<Card> hand){
int sum = 0;
for (Card c : hand){
sum += c.getCardValue().getNumeric();
}
return sum;
}
和
public static int calcScore(ArrayList<Card> hand){
Scanner aceHandler = new Scanner(System.in);
int sum = 0;
boolean countedAce = false;
for (Card c : hand){
if (!c.getCardValue().getFace().equals("A")){
sum += c.getCardValue().getNumeric();
}
else{
if (sum >= 11){
sum += 1;
}
else if (countedAce == false){
System.out.println("Do you want 1 or 10 for ace? \n Enter '1' or '11'");
String answer = aceHandler.nextLine();
if(answer.equals("1")){
sum+=1;
countedAce = true;
}
else{
sum+=11;
countedAce = true;
}
}
}
}
return sum;
}
最高者无法对Ace做任何事情,而且在放入&#34; 1&#34;之后,最后一个人不停地要求输入。或&#34; 11&#34;。我在main(String [] args)中运行终极游戏。我怎样才能获得这些方法中的任何一种?
另外,我有时遇到问题,我的dealIn(ArrayList hand)方法处理重复。我试图设计它以避免它:
public static ArrayList<Card> dealIn(ArrayList<Card> hand){
Card a = new Card();
Card b = new Card();
hand.add( a);
if(!b.equals(a))
hand.add(b);
return hand;
}
(!b.equals(a))条款应该避免它们,但它有时不会。我该如何解决这个问题?
答案 0 :(得分:0)
你想要做的是忽略A,直到你计算了手中的其他所有内容,然后计算aces,如果手牌数为10或更小,则计算每个a为11,否则为1。如果你需要我,我可以java这个,但我认为伪代码应该足够了:
sum = 0;
aces = 0;
for each (card in hand) as card
{
if card is ace
aces++
else
sum += card.value
}
while aces > 0
{
aces--
if sum <= 10
sum += 11
else
sum += 1
}