在我的算法中出现问题时,' ACE'卡片出现在我的二十一点游戏手中

时间:2014-11-27 16:28:05

标签: java algorithm oop

我试图使用Java编写一个blackJack游戏,而我正面临这个算法问题,如果Hand classCard class将从ACE中随机选择3张卡片。{{1}卡片出现在手中它将取值1或11,这是希望的结果:

Welcome to the BlackJack table. Let's play !
Your hand is currently : [A, 8, A] : [10, 20, 20, 30]
The best score is: 20
Welcome to the BlackJack table. Let's play !
Your hand is currently : [K, J, 4] : [24]

这是我写的方法:

public List<Integer> count() {
        LinkedList<Integer> List = new LinkedList<Integer>();
        LinkedList<Integer> List2 = new LinkedList<Integer>();
        List.add(0);
        if(this.cardList.size()>0) {
            for (Card c : cardList) {
                for (int i = 0; i < List.size(); i++) {
                    int val = List.get(i);
                        List2.add(List.set(i, c.getPoints() + val  ));
                    if(c.getPoints() == 1) {
                        List2.add(List.getFirst() + (val + 11));

                    }
                }
            }

        }

        return List2;
    }

这就是我得到的:

Welcome to the BlackJack table. Let's play !
Your Hand is currently : [5(♥), 8(♦), 8(♥)] [0, 5, 13]

2 个答案:

答案 0 :(得分:1)

由于这看起来有点像家庭作业,我会尝试用一种方法来帮助你解决问题。

 Separate the Aces since they have a variable value ( 1 / 11 )
 Calculate the value of the other cards.
 if you have Aces{  
      Do all the combinations of the values of the Aces.     
      //( Example with 2 aces: 1+1 ; 11+1; 11+11; 1+11).   
      for each combination sum it to the other cards and add it to the list.   
 }else{         
       add just the other cards value
 }

答案 1 :(得分:0)

或许更简单的方法是计算最低分数(如果aces得分为1),以及(单独)是否有ace。 (所以你现在知道你是否可以在比分上加10分。)

如果玩家有2个ace,玩家永远不会在他们的分数上加20,因为这将导致得分至少为22(这对玩家来说是不利的。)

然后在计数阶段结束时构造一个数组,其中第一个元素是最低分数。如果您有ace,请添加第二个元素,得分最低+10。