私の現在のプロジェクトでは、への挿入数のカウンターを保持する必要がありTreeMap<String, TreeSet<Song>>
ます。このプロジェクトでは、文字列内の個々の単語(この場合は歌詞)の検索を実行します。マップ挿入のコースを決定するための3つのテストがあり、アルゴリズムは次のようになります。
- 単語に複数の文字があり、一般的な単語ではないかどうかをテストします
- マップにすでに単語がキーとして含まれている場合は、セットにすでに曲が含まれているかどうかをテストします
- trueの場合、挿入カウンターをインクリメントします
- マップにキーとして単語が含まれていない場合
- 新しいノードを作成し、設定する曲を追加します
- インクリメントカウンター
カウンターをprivate double insertions;
クラス変数として宣言します。
コンストラクターで初期化されます。
public SearchByLyricsWords(SongCollection sc) {
this.songs= sc.getAllSongs();
buildSongMap();
insertions=0;
totalReferences=0;
averageReferences=0;
}
buildMapメソッド:
for (String word:currentLyrics) {
if (word.length()>1 && !commonWords.contains(word)) {
if (lyricWords.containsKey(word)) {
if (!lyricWords.get(word).contains(song))
insertions++; //this is a non-duplicate song in the set
lyricWords.get(word).add(song);
} else {
TreeSet<Song> songSet= new TreeSet<Song>();
songSet.add(song);
lyricWords.put(word, songSet);
keyWords.add(word);
insertions++;
}
//System.out.println(word+" added");
}
} //end loop through string
メソッドで変更されたクラス変数が、別のメソッドで正しい値を与えないのはなぜですか?