Привет!
Задача сама по себе не сложная, и я это понимаю. Подобные уже решала.
В коде закомментировала чуть ли не каждую строку, чтобы был примерно понятен ход моих мыслей.
Никого не прошу писать мне готовое решение, просто натолкните меня на нужную мысль.
Заранее спасибо!
package com.javarush.task.task10.task1016;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
/*
Одинаковые слова в списке
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
ArrayList<String> words = new ArrayList<String>();
for (int i = 0; i < 20; i++) {
words.add(reader.readLine());
}
Map<String, Integer> map = countWords(words);
for (Map.Entry<String, Integer> pair : map.entrySet()) {
System.out.println(pair.getKey() + " " + pair.getValue());
}
}
public static Map<String, Integer> countWords(ArrayList<String> list) {
HashMap<String, Integer> result = new HashMap<String, Integer>();
for(int i = 0; i < list.size(); i++)
result.put(list.get(i).toLowerCase(), 0);
//Это счетчик повторений слов
// -1 потому что первое совпадение ключа мапы и слова из списка не считается
// и после count++ count будет равно ноль
int count = -1;
//Рассматриваем каждую отдельную пару мапы (слово, повторения)
for(Map.Entry<String, Integer> pair : result.entrySet()) {
//Ключ- К, а значение - V
String K = pair.getKey();
Integer V = pair.getValue();
//Рассматриваем каждое слово из списка, приведенное к нижнему регистру
for(int i = 0; i < list.size(); i++) {
//Если слово из списка совпадает с ключом мапы, счетчик + 1
if(list.get(i).toLowerCase().equals(K))
count++;
}
// После того, как ключ первой пары сравнили с каждым словом из списка,
// обновляем значение в мапе
result.put(K, count);
}
return result;
}
}