java - 我在 Java 中做错了什么 blackjack 文件计数器?

标签 java counter blackjack

我正在做这个练习,练习是这样说的:

*给定包含 3 位玩家之间 1000 次随机 21 点手牌的输入文件(此处:blackjack.txt),计算任何玩家在所有游戏中遇到的 21 点次数。

21 点定义为任何花色的 A 和任何花色的 10 点牌(J、Q、K 或 10)。

输入文件如下所示:(作为示例)

4H 5C AD JH 9C 10H

这意味着玩家一有红桃 4 和梅花 5;玩家 2 有一张方片 A 和一张红心 J(算作二十一点);玩家 3 有梅花 9 和红桃 10。

为了这个问题的目的,已知有一个标准的 52 张卡片组,每个新游戏都会重新洗牌。*

我认为我的方法是正确的,我的代码是正确的,但我的答案失败了,任何提示,获得正确答案的建议

这是我的代码:

import java.io.*;

public class Problema16 {

    public static void main(String args[]) {
        File archivo = null;
        FileReader fr = null;
        BufferedReader br = null;
        int counter = 0;
        //int rest = 0;

        try {
            archivo = new File("C:\\Users\\\blackjack.txt");
            fr = new FileReader(archivo);
            br = new BufferedReader(fr);
            String linea;
            String[] linea2 = null;

            while ((linea = br.readLine()) != null) //System.out.println(linea);
            {
                linea2 = linea.split(" ");

                String a = (linea2[0]);
                String b = (linea2[1]);
                String c = (linea2[2]);
                String d = (linea2[3]);
                String e = (linea2[4]);
                String f = (linea2[5]);

                if ((a.startsWith("A") && (b.startsWith("J") || (b.startsWith("Q") || (b.startsWith("K") || (b.startsWith("10")))))) || ((a.startsWith("J") || (a.startsWith("Q") || (a.startsWith("K") || (a.startsWith("10"))))) && (b.startsWith("A")))) {
                    counter++;
                    //System.out.println(a + "" + b + "");
                } else if ((c.startsWith("A") && (d.startsWith("J") || (d.startsWith("Q") || (d.startsWith("K") || (d.startsWith("10")))))) || ((c.startsWith("J") || (c.startsWith("Q") || (c.startsWith("K") || (c.startsWith("10"))))) && (d.startsWith("A")))) {
                    counter++;
                    //System.out.println(c + "" + d + "");
                } else if ((e.startsWith("A") && (f.startsWith("J") || (f.startsWith("Q") || (f.startsWith("K") || (f.startsWith("10")))))) || ((e.startsWith("J") || (e.startsWith("Q") || (e.startsWith("K") || (e.startsWith("10"))))) && (f.startsWith("A")))) {
                    counter++;
                    //System.out.println(e + "" + f + "");
                } else {
                    //sobra++;
                }
            }

            System.out.println(counter);
            //System.out.println(sobra);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

这是在线练习 1 .我的答案是119,但错了。

最佳答案

您在每个 if 中的条件都很难用大括号阅读,但看起来还可以。 你的问题在于else if。玩家 #1 和玩家 #2(以及玩家 #3)可以同时玩二十一点,因为您的代码将只计算其中的一个。

去掉 else 就可以了。

您还可以稍微提高代码的可读性。一些提示:

  • 检查第二位/第三位玩家的手牌与第一位玩家的逻辑相同。使用循环。
  • 您可以计算手牌的点数并检查它是否等于 21,而不是显式地检查特定的牌。最好将该逻辑放在一个单独的方法中。
  • 计算手牌值(value)的一种简单方法(假设输入始终合法)是放弃花色(因为它无关紧要)并使用预定义的 map 来确定牌值(例如“J”=> 10,“A”- 11等)

关于java - 我在 Java 中做错了什么 blackjack 文件计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6118138/

相关文章:

PHP点击计数器

java - 在访问方法中使用相同的 UI 实例

counter - 如何在 Berkeley DB 中对 Map<Number,Map<Number,Number>> 建模

java - antlr4 跨模式共享规则

python 乘以两个收集计数器

java - 如何将整数值转换为内容不同的字符串

javascript - 使用 JavaScript 编程 Aces

java - 使用骰子的二十一点游戏

Java - 检查 JTextField 是否为空

java - 如何使用 @ID 和 @GenerateValue 从 Hibernate + JPA 中的序列获取 Oracle 生成值