我应如何在Java Blackjack游戏中处理Ace?另外,如何停止重复卡交易?

时间:2017-06-17 18:57:45

标签: java

我正在编写一个到目前为止的二十一点游戏,它应该做什么,除了处理何时以及如何将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))条款应该避免它们,但它有时不会。我该如何解决这个问题?

1 个答案:

答案 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
}