2
我有一些代码可以计算给定的单词ArrayList中的单词频率。我有一个频率类,它基本上存储了单词及其各自的频率。这里是我的代码:单词频率计数器,列表不能正常工作
public static List<Frequency> computeWordFrequencies(List<String> words) {
List<String> wordsList = words;
String[] wordsArray = wordsList.toArray(new String[0]);
Arrays.sort(wordsArray);
Set<String> noDuplicates = new LinkedHashSet<>(Arrays.asList(wordsArray));
List<Frequency> frequencies = new ArrayList<>();
for (String word : noDuplicates) {
int wordFrequency = Collections.frequency(words, word);
Frequency newFrequency = new Frequency(word, wordFrequency);
System.out.println(newFrequency.toString());
frequencies.add(newFrequency);
}
for (Frequency f : frequencies) {
System.out.println(f.getText()+" "+f.getFrequency());
}
return frequencies;
}
仅供参考,频率类:
public class Frequency {
private final String word;
private static int frequency;
public Frequency(String word) {
this.word = word;
frequency = 0;
}
public Frequency(String word, int newfrequency) {
this.word = word;
this.frequency = newfrequency;
}
public String getText() {
return word;
}
public int getFrequency() {
return frequency;
}
public static void setFrequency(int newFrequency) {
frequency = newFrequency;
}
public void incrementFrequency() {
frequency++;
}
@Override
public String toString() {
return word + ":" + frequency;
}
}
我插入打印语句在我的代码,这是一些输出:
包装:1码:3纱:2年:2尚未:1育空地:1零:2放弃
2手风琴2 acequia 2跨
2加2 2
所以当创建频率时,他们有正确的频率,但不知何故他们后来都变为2.更奇怪的是,如果我将第二个打印语句更改为f.toString(),甚至是第一个print语句只显示2这样的频率:
上升:2河流:2 riveredge:2 riversound:2路:2个走鹃:2 路边:2烤:2
灿有人告诉我为什么所有的频率都设置为2,或者问题出在哪里?从
private static int frequency
,很好的发现 –