我的孩子有一个家庭作业,用Java编写Blackjack.我帮助了他一点但是大部分时间他都是自己做的,而且实际上打得很好.他甚至发现了一个错误,我没有看到它是如何计算手值的.但是,有一个他没有处理过的障碍,我能想到的每个解决方案都非常复杂,超出了他能够轻松编写他仍然基本的Java技能的能力.
王牌.事实上,不只是一个Ace,其中有四个,你可以用一只手拿到所有四个.当有一个或多个A时,你如何优雅地计算一手牌的价值,每个A值可能是一个或十一个.我觉得应该有一个优雅的算法,但我没有看到它.当然,部分原因可能就是我累了,但也许你可以提供帮助.
Unk*_*own 24
只需将每个ace视为11.然后当值超过21时,从手中每个ace的总数中减去10.
只有1个Ace算作11.
因此,将每个Ace处理为11的另一种方法是将每个Ace视为1.然后将总数加10(无论手头是否携带),并将其保存在单独的"高"变量(值+ 10)中.还要创建~camp的布尔值:如果(任何)ace出现,则为true.
因此,在检查经销商的分数时; 检查球员的牌是否有(任何)Ace,在这种情况下你(可以)使用"高"值,否则(没有Ace)使用"低"值.
那样King + 9 + Ace(可能是坏例子)将是〜低:20&high:30&ace:true - 有了这些信息,你可以检查30 - 10是否会"赢得比赛".所以,King + 5 + 5(低:20高:30 ace:false)将不会使用它的高值30.
我正在使用这种方法所以我知道什么时候显示alt.屏幕上的Ace得分; 像3/13(Ace + 2),使用相同的ace:true | false布尔我已经拥有.这肯定和第一个给出的答案相同,但这对我来说更有意义:)