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
,很好的發現 –