LINUX.ORG.RU

Что-то не так в цикле

 


1

2

Добрый вечер! Я два дня искал ошибку в первом более-менее серьезном своем проекте, и нашел её в самом не очевидном месте кода:

    private int getWordCount(String word){
            int wordCount = 0;
            for (int i=0;i<wordsList.size();i++){
                if (wordsList.get(i)==word){
                    wordCount++;
                    System.out.println("Word: " + word + " Count: " + wordCount);
                }
            }
            return wordCount;
        }

Самое забавное что println внутри цикла выполняется, а инкремент вроде как нет. На выходе:

    Word: Test Count: 1

    Word: Test Count: 1

    Word: Test Count: 1
Не могу сообразить, в чем проблема?

А что ты хотел увидеть? wordList не меняется и в нем только раз находится такая же ссылка на строку как и в word.

Кстати, да, не == а equals если хочешь текст сравнивать, а не ссылки

vertexua ★★★★★
()

в первом более-менее серьезном своем проекте

ужос, если такое в 7 строках уже...

fornlr ★★★★★
()
Последнее исправление: fornlr (всего исправлений: 1)
wordsList.get(i)==word

нашел её в самом не очевидном месте кода

Что-то не так в цикле

Шок.

По теме: рано тебе еще садиться за проекты, самое время прочитать пару книжек вроде «Java для самых маленьких».

slyjoeh ★★★
()
Ответ на: комментарий от runtime

это если в wordlist не могут попадаться null

Deleted
()
Ответ на: комментарий от slyjoeh

Так в чем ошибка-то ты можешь определить? -.-

anonymous
()
private int getWordCount(String word){
    return Collections.frequency(wordsList, word);
}

Ошибки на первый взгляд нету (сам код одна ошибка, на самом деле). Вывод это вызов трёх раз метода getWordCount для одного и того же word=«Test»

vtVitus ★★★★★
()
Ответ на: комментарий от vtVitus

Ошибки на первый взгляд нету (сам код одна ошибка, на самом деле).

Да, со стороны какого-нибудь паскаля тут наверное все верно будет. Ушел читать стандартную библиотеку. Спасибо!

shooter93 ★★
() автор топика

В том, что используешь out для дебага. Попробуй

System.err.println("here");

comp00 ★★★★
()
Ответ на: комментарий от runtime

Лучше StringUtils.equals(s1,s2) чтобы не напороться на NullPointerException. Ну или если apache commons лениво тянуть, то просто не забыть сравнить на != null.

BattleCoder ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.