Почему мой счетчик увеличивается в цикле, но возвращает ноль? - PullRequest
1 голос
/ 06 ноября 2010

В моем текущем проекте я должен хранить счетчик количества вставок в TreeMap<String, TreeSet<Song>>.Проект состоит в том, чтобы запустить поиск отдельных слов в строке, в данном случае текст песни.У меня есть три теста, чтобы определить ход вставки карты, и мой алгоритм работает:

  • тест, если слово содержит более одного символа и не является общим словом
  • , если карта ужесодержит слово в качестве ключа, проверка, если установлено, уже содержит песню
  • , если истина, счетчик вставки приращения
  • , если карта не содержит слова в качестве ключа
  • создать новый узел, добавить песню для установки
  • счетчик приращений

Я объявляю счетчик как 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

Почему переменная класса, измененная в методе, не дает правильное значение в другом методе?

Ответы [ 3 ]

3 голосов
/ 06 ноября 2010

Попробуйте

public SearchByLyricsWords(SongCollection sc) {
    this.songs= sc.getAllSongs();
    insertions=0;
    totalReferences=0;
    averageReferences=0;
    buildSongMap();
}  
3 голосов
/ 06 ноября 2010

Похоже, что вы устанавливаете переменную в ноль сразу после вызова функции buildsongmap.

2 голосов
/ 06 ноября 2010

Как уже упоминалось, это вопрос инициализации в конструкторе.Еще одна вещь: в вашем методе buildSongMap вы добавляете песню на карту независимо от того, содержит ли она ее или нет.Несмотря на то, что вы используете набор, который будет предотвращать дублирование, я думаю, что удобнее выполнять добавление только в том случае, если его уже нет.

...