Количество букв

  • 12
  • Недоступна
Вам никогда не казалось, что букв в алфавите — слишком много? Компьютеры вполне обходятся двумя, а у нас их целых 33. Непозволительная избыточность! Тем не менее, приходится мириться с реальностью и решать соответствующие задачи. Вот одна из них: введите с клавиатуры 10 строчек и подсчитайте в них количество различных букв.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (530)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Евгений Королёв 12 уровень, Санкт-Петербург
22 февраля, 18:32
Заполнил map и понял что не знаю как вывести ее в алфавитном порядке. Почитал комментарии и решил выводить текст сразу в цикле в котором перебираю алфавит после вложенного цикла в котором считаю количество повторов)
Error 404 13 уровень, Краснодар
16 февраля, 17:58
Решил так: 1. Создал пустую строку и мапу; 2. Преобразовал список введенных с клавиатуры строк в одну строку (из п. 1); 3. Получил из строки массив с символами с помощью s.toCharArray(); 4. Cравнил массив символов с алфавитом и положил в мапу (символ алфавита - это ключ, переменная счетчик - значение). Тут понадобится двойной цикл for и переменная с типом int - счетчик одинаковых символов; 5. Вывел мапу на экран с помощью for (перебрал список с алфавитом и с помощью списка же доставал из мапы значение по ключу) P.s. не смог вывести с помощью for each мапу в алфавитном порядке, знал бы раньше, вместо мапы бы просто еще один список добавил и в него пихал счетчик символов)))
Roman Grand 13 уровень, Новосибирск
21 февраля, 03:07
сколько ни читаю комменты после решения задачи, твои мыслительные пути поиска вероятного решения очень часто совпадают с моими😅 дак вот, дойдя до момента вывода мапы я полез в гугол и он мне подсказал, что у мапы есть отсортированный интерфейс SortedMap<>, только вот проблема, русская буква 'ё' в нём находится в конце алфавита, после буквы 'я' ... но мы не ищем лёгких путей)) метод subMap помог разбить SortedMap на две части, а 'ё' вывел отдельно, между sub'ами UPD: а потом я узнал про LinkedHashMap<>
The_vict0r 13 уровень, Минск
21 февраля, 12:50
А ведь можно было итерироваться по исходному массиву с алфавитом. И на каждый элемент вызывать из map соответствующее значение. Тут главное учесть случаи, когда буквы из алфавита нет во введённых строках. По умолчанию будет выводить null, а нам надо 0. Но этот вопрос решается через банальный if :)
Arten Rjjjj 12 уровень, Харьков
12 февраля, 14:26
Решил так, добавил список Мар, где ключом является алфавит, а значения количество букв. Валидатор не принимал, пока не ввел проверку на наличие других символов, кроме букв.
Error 404 13 уровень, Краснодар
16 февраля, 17:40
Тоже так сделал, только не могу понять почему при выводе в консоль мапа выводится не в алфавитном порядке, ведь добавлял ее через список в алфавитном((
Error 404 13 уровень, Краснодар
16 февраля, 17:45
Все нашел решение map.get(alphabet.get(j)) мне в помощь))
San4ous13 18 уровень
10 февраля, 21:14
Решил так: 1. Объявил дополнительную переменную string типа String, в которую записал список list как одну строку с помощью метода toString(). 2. Далее объявил новый список типа Character. 3. С помощью for - each прошелся по массиву, который был получен в результате преобразования string.toCharArray(), добавляя каждый char в список из п.2
String string = list.toString();
        List<Character> chars = new ArrayList<>();
        for (char c : string.toCharArray()) {
            chars.add(c);
        }
4. Далее подсчитал количество каждой буквы в списке с помощью Collections.frequency().
Andrii 19 уровень
27 января, 19:39
Мой метод : 1. Создаем статический метод который делает большой массив чаров из всех строк массива введенных строк. 2. С помощью метода преобразовываем массив строк в общий массив чаров. 3. Создаем цикл в цикле где внешний цикл перебирает алфавит а внутренний перебирает наш созданный массив чаров. Каждый елемент алфавита сравниваем с каждым елементом чаров при етому инкрементируем счетчик. На каждом витке внешнего массиа выводим на екран каждый елемент алфавита + значение счечика.
Pablo 15 уровень
20 января, 09:23
Распишу один из вариантов подробно, вдруг кому нужно:
for (Character symbol : alphabet) {         //Перебираем весь алфавит по Character "буквам"
        int count = 0;                              //Задаём счетчик. При каждом новом проходе, он обнуляется
        for (String str : list) {                  //Перебираем все строки, которые ввели в ArrayList
            char[] chars = str.toCharArray();  //Каждую строчку раскладываем на массив char "букв"
            for (char elem : chars) {       //Теперь для всех "букв" строчки
                if (symbol == elem) {   //Сравниваем текущий symbol поочередно с каждой буквой строчки
                    count++;         //Если условие проходит, то инкрементируем счётчик (увеличиваем на 1)
                }
            }
        }
        System.out.println(symbol + " " + count); //Выводим текущий элемент алфавита и значение его счётчика
}
Пример: 1. Изначально берётся символ "а"; 2. Значение count = 0; 3. Берётся строчка "машина"; 4. Раскладывается на массив символов "м", "а", "ш", .., "а"; 5. Каждый символ строчки ("машина") сравниваем с нашим символом из алфавита ("а"); 6. При совпадении (а в слове "машина" их два) счетчик увеличивается. После прохождение по каждому символу значение count = 2. Вложенный цикл завершается и тут же повторяется со следующей строкой "Перерыв"; 7. После прохождение всех строк, значение count = 5. Выводим текущий символ алфавита и значение счётчика ("a 5"). 8. Второй вложенный цикл завершается и тут же начинает сначала, но уже берём второй символ алфавита "б", а значение счётчика count = 0. Повторяем операции. Надеюсь кому то это пригодится)
Andrew 14 уровень, Москва
31 января, 18:14
Прям респект огромнейший! Вот почему то до этого комментария никак толком понять не мог вложенные циклы, а здесь прочитал и как то понятнее стало
Наталья Матькова 16 уровень, Самара
14 января, 09:51
Долго не понимала, почему буквы выводятся не в алфавитном порядке, пока не вспомнила, что map вобще не запоминает порядок добавления элементов.
Daniil Smirnov 22 уровень, Москва
29 января, 14:49
используйте LinkedHashMap
Роман Backend Developer
12 января, 15:06
Создаем перебор каждого символа алфавита через цикл for{ Cоздаем переменную счетчик для хранения суммы каждого символа; Для текущего символа из алфавита начинаем перебирать все слова из списка введеных слов через цикл for{ Каждое слово из списка разбиваем на массив символов; Перебираем массив символов из полученного слова через цикл for{ Каждый символ из массива символов сравниваем с символов из алфавита и если есть совпадение{ увеличиваем счетчик; } } } Выводим результат; }
Артем 16 уровень, Киев
12 января, 14:35
Долго ломал голову над тем, как получить список или массив char'ов из введённых строк и только когда забил и решил задачу другим методом, дошло: String и есть массив из char'ов... Тоесть можно все введённые строки объединить в одну супер-пупер строку и потом приступать к подсчёту букв. Поиск букв удобно осуществить через java.lang.CharSequence: ссылка на примеры использования
Evgeny Krasnoperov 15 уровень, Москва
5 января, 10:32
1. Преобразуем все введённые слова в один массив из Char (charAt() в помощь) 2. Сравниваем два массива и выводим через счетчик (count и equals в помощь)