如何计算数字在.txt文件中出现的次数

时间:2012-03-02 12:23:36

标签: java io

早上好,

我正在做一些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");
            }
        }
    }
}

2 个答案:

答案 0 :(得分:5)

由于需要跟踪多个计数,因此单个整数计数器显然不够。

一种可能性是使用Map<Integer,Integer>作为计数。由于这是作业,我留给你弄清楚细节。

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

答案 1 :(得分:0)

由于您正在处理Integer,因此可以预加载Map<Integer,Integer>,其中所有值均小于Integer.MAX(2,147,483,647)。

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