早上好,
我正在做一些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");
}
}
}
}
答案 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。