Почему моя функция содержит не обнаружение элемента? - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь прочитать большой блок текста и сохранить каждое уникальное слово и количество раз, которое оно встречается в тексте. Для этого я сделал список массивов класса Word. Класс Word просто хранит слово и количество раз, когда оно появилось. Чтобы избежать дублирования одного и того же слова, я использую функцию .contains (), чтобы посмотреть, обработал ли я слово раньше, но по какой-то причине .contains () не работает.

class Main 
{
  public static void main(String[] args) throws FileNotFoundException 
  {
    File file = new File("poe.text");
    Scanner f = new Scanner(file);
    ArrayList<Word> words = new ArrayList<Word>();
    int total = 0;

    while(f.hasNext())
    {
      Word temp = new Word(f.next().toLowerCase().trim());
      //System.out.println("temp is "+temp.getWord());
      total++;
      if(words.contains(temp))
      {
        words.get(words.indexOf(temp)).up();
      } else
      {
        words.add(temp);
      }
    }

    for(Word w:words)
    {
      System.out.println(w.toString());
    }
  }
}

if Оператор никогда не оценивается как true, и каждое слово добавляется к словам ArrayList, даже если оно уже присутствует.

1 Ответ

0 голосов
/ 31 марта 2020

В Javado c для List метод содержит метод equals (), чтобы оценить, совпадают ли два объекта. Вы реализовали равенства и хэш-код в своем классе слов?

Javadoc http://docs.oracle.com/javase/7/docs/api/java/util/List.html#contains% 28 java .lang.Object% 29

...