package com.javarush.task.task10.task1012;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
/*
Количество букв
Ввести с клавиатуры 10 строчек и подсчитать в них количество различных букв (для 33 букв алфавита). Результат вывести на экран в алфавитном порядке.
Пример вывода:
а 5
б 8
в 3
г 7
д 0
…
я 9
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
// алфавит
String abc = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя";
char[] abcArray = abc.toCharArray();
ArrayList<Character> alphabet = new ArrayList<Character>();
for (int i = 0; i < abcArray.length; i++) {
alphabet.add(abcArray[i]);
}
// ввод строк
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < 10; i++) {
String s = reader.readLine();
list.add(s.toLowerCase());
}
Map<Character, Integer> map = new LinkedHashMap<>();
for (Character anAlphabet : alphabet) {
map.put(anAlphabet, 0);
}
// напишите тут ваш код
for (String aList : list) {
for (int j = 0; j < aList.length(); j++) {
map.replace(aList.substring(j, j + 1).charAt(0), map.get(aList.substring(j, j + 1).charAt(0)) + 1);
}
}
for (Map.Entry<Character, Integer> pair:map.entrySet()) {
System.out.println(pair.getKey() + " " + pair.getValue());
}
}
}
Бендер
20 уровень
Отлично работает но проверку не проходит
Решен
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Игорь Full Stack Developer
26 сентября 2017, 14:10
Очень странная работа с коллекцией Map.
Откровенно говоря, для решения задачи использовать дополнительные коллекции вообще не нужно, ведь результат просят вывести, а не где то сохранить.
Итерируете по списку с буквами алфавита, вычисляете количество вхождений буквы в строки (можно все строки объединить в одну, тогда еще проще), тут же выводите результат.
0
Pavlo Plynko Java-разработчик в CodeGym Expert
21 сентября 2017, 08:58
Как уже написали, если в строке встретится, к примеру, пробел, то в map не окажется элемента с таким ключем.
+1
Бендер
21 сентября 2017, 09:37
Спасибо
0
Pomidor
20 сентября 2017, 22:28
Увы, ваш код далек от "Отлично работает"
потестите свой код на различных строках, любых (в условии не сказано, что в строке)
разберите строчку 49 - будет выскакивать NullPointerException
еще не понимаю зачем вводить совсем уж лишние данные... мало массива (алфавит), еще и в ArrayList зачем то перегоняете?
ps. всегда закрывайте поток, если он больше не нужен (иногда валидатор очень щепетилен к этому) (reader.close())
+1
Бендер
21 сентября 2017, 09:37
Спасибо, а где именно нужно reader.close() прописывать?
Этот код уже был изначально 0
Pomidor
21 сентября 2017, 12:38
в любом месте: после того как отработали с потоком и больше он не нужен
в вашем случае начиная с 40 строки
0
Александр ХаартExpert
20 сентября 2017, 18:25
Так то, вроде все норм. Но можно упростить...
Вместо replace можно использовать put или merge, саму строку можно разбить на массив символов и его использовать в цикле, убережет от ошибок.
+1
Бендер
21 сентября 2017, 09:38
Спасибо
0