【发布时间】:2019-10-11 21:59:49
【问题描述】:
我正在编写一个程序来计算每个唯一单词在文本文件中出现的次数,然后返回出现次数最多的单词以及它出现的次数。因为我不知道会有多少不同的单词,所以我不能使用数组,因为我无法预测它需要多大。因此我使用了两个并行的 ArrayList。 myWords 是字符串列表,myFreqs 是整数列表,因此 myFreqs 中的每个索引都包含存储在 myWords 的同一索引中的单词的出现次数。
为此,我尝试编写一个 for 循环来标识 myFreqs 中包含最高值的索引。我正在努力编写这个循环,因为 ArrayList 没有 .length() 方法,所以我不确定在循环中编写停止条件的最佳方法。我尝试使用
将 ArrayList 转换为 Array myFreqs.toArray(<Integer> array);
这样我就可以获得数组的长度,但这会给我带来编译时错误。我已经尝试了上面几个稍微不同的版本,我得到了“非法的表达式开始”错误或“无法从静态上下文引用非静态方法”错误。我感觉有一种更简单、更直接的方法来实现我所忽略的我想要的东西。
private ArrayList<String> myWords;
private ArrayList<Integer> myFreqs;
public int findIndexOfMax () {
int[] array = new Array[100];
myFreqs.toArray(<Integer> array);
int maxVal = 0;
int maxIdx = -1;
for (int k = 0; k < array.length; k++) {
if (array[k] > maxVal) {
maxVal = array[k];
maxIdx = k;
}
}
return maxIdx;
}
【问题讨论】:
-
使用
Map而不是管理两个列表不是更容易吗? -
旁注:不能保证只有一种解决方案。多个单词可以同样频繁地出现。