【问题标题】:How to count how many times a number appears in a .txt file如何计算一个数字在 .txt 文件中出现的次数
【发布时间】:2012-03-02 22:08:34
【问题描述】:

早上好,

我正在做一些 Java 练习并偶然发现了这个问题。我有一个包含多个数字的 .txt 文件,每行一个。练习的目标是查看哪些数字等于 10^0, ... , 10^n 直到达到 n。然后,我必须在 .txt 中写下每一个出现的次数。 所以我有一个文件:

1 100 100 100 10 1 1

我需要写:

1 - 10 3 - 1 3 - 100

我可以读取文件,检查然后编号,然后打印。我只是不知道如何制作一个计数器而不是保持正确。有什么帮助吗?

这是一段代码:

// TODO - Count how many time a number appears.
public static void numberOfTimes (BufferedReader in, BufferedWriter out, int n)        throws IOException {

        String s;
    int i;
    int counter = 0;

    while ((s = in.readLine()) != null) {
        i = Integer.parseInt(s);
        for (int j = 0; j <= n; j++) {
            if (i == Math.pow(10, j)) {
                counter++;
                out.write(Integer.toString(counter) + " " + Integer.toString(i) + "\n");
            }
        }
    }
}

【问题讨论】:

  • 所以您只需要计算 1、10、100、1000 等数字吗?换句话说,你能在源文件中有数字 45 吗?
  • 是的,源文件中混杂了很多数字。我只需要在给定一个 n 的情况下检查所有这些,看看哪些是 10^0 到 10^n 并计算它们。

标签: java io


【解决方案1】:

由于要跟踪多个计数,单个整数计数器显然是不够的。

一种可能性是使用Map&lt;Integer,Integer&gt; 进行计数。由于这是作业,我留给你弄清楚细节。

另一种可能性是使用计数数组,并使用log10(i) 作为数组的索引。换句话说,10^k 的计数将存储在数组中的第 k 位置。 提示:在您的代码中,您已经在间接计算 log10(i)

【讨论】:

  • +1 表示 log10 的想法,这在这种特殊情况下适用,但不适用于任何数字(与始终有效的地图不同)。
  • 或者您可以只使用字符串长度 - 1(= 零的数量)
  • 嗯,没用过或听说过$Map,不过我会看看API。
  • 我在想这样:将所有找到的值存储在一个数组中,然后查看每个数组。如果找到例如 3 10^0,则 counter1 = 3、10^1 counter2 = 2 等。但这看起来效率很低,我希望有一个更优雅、更简短的解决方案。感谢您的所有回答。
【解决方案2】:

由于您正在处理 Integer,因此您可以预加载所有小于 Integer.MAX (2,147,483,647) 的值的 Map&lt;Integer,Integer&gt;

地图将需要 10^0,10^1,...,10^9 中的所有值作为键(总共十 (10) 个键)。然后您要做的是对您正在读取的值执行布尔检查,如果它与这些键之一匹配,则将该键的值增加 1。

【讨论】:

    猜你喜欢
    • 2021-11-03
    • 1970-01-01
    • 2017-10-28
    • 2014-06-07
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    相关资源
    最近更新 更多