Нам повторы не нужны

  • 5
  • Недоступна
Сложно представить себе ситуацию, в которой может понадобиться программа, которую мы предлагаем вам написать. Впрочем, маленькая модификация, и она обретает практический смысл. Также её можно представить частью чего-то большего (поиска?). Давайте создим словарь, занесём в него записи по принципу «фамилия» - «имя» и удалим людей с одинаковыми именами.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (276)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Haumi8 уровень, Санкт-Петербург
позавчера, 22:37
заставила же эта задачка пропотеть....
Artem Yaremchuk10 уровень, Омск
12 апреля, 17:37
мое топорное решение: В методе removeTheFirstNameDuplicates() создал ArrayList. Занес в него все значения. Вложенным циклом в цикл сравнивал каждое значение с каждым в ArrayList, если совпадало, вызывал метод removeItemFromMapByValue(). Все. Зато с первого раза. P.S.(решаю задачи в лекции не по порядку, а по мере возрастания сложности, и эта задача оказалась последней, к этому моменту я достаточно поднатаскался в Мар-ах)))
Haumi8 уровень, Санкт-Петербург
позавчера, 22:39
можно было занести в ArrayList и сортануть его. потом одним циклом проверить совпадает ли значение со следующим и если совпало вызывать метод.
finetyro9 уровень, Москва
11 апреля, 12:16
Метод removeTheFirstNameDuplicates() должен удалять из словаря всех людей, имеющие одинаковые имена. А сам метод изменять можно? А то он не удаляет из словаря одинаковые имена, просто удаляет указанное имя.
Nail9 уровень
9 апреля, 14:34
задача на то, что бы удалить записи с одинаковыми именами, но валидатор не принимает задачу, если в ней имеются одинаковые записи.
Павел14 уровень, Санкт-Петербург
31 марта, 18:59
что то я совсем затупил, почему мы где то указываем тип метода но не указываем параметры, а где то указываем параметры но не указываем тип метода? ответьте мне плиз кому не сложно!! по началу понимал а щас вообще щелк и все просто... public static void removeTheFirstNameDuplicates(Map<String, String> map) вот тут не указан тип метода public static HashMap<String, String> createMap() { а тут указан но зато нет параметров... заскок какой то что ли, жесть
Виталий26 уровень, Санкт-Петербург
1 апреля, 05:00
public VOID removeTheFirstNameDuplicates(Map<String, String> map); здесь возвращаемое значение void указывает на то, что функция ничего не возвращает вызывающему её окружению. То есть вы в main её вызвали, она что-то то там у себя внутри сделала с переданным ей аргументом MAP, но ничего вам поэтому поводу не сказала. public static HashMap<String, String> createMap(); здесь функции не нужны никакие аргументы, потому что она работает без них. Сама по себе сгенерировала внутри себя карту. Но после работы функции она должна её отдать по задумке кодера. По-этому тип возвращаемого значения HashMap<String, String>. И в теле функции Вы потом напишете return myMap; Могут быть функции и без аргументов и без возвращаемого значения. void foo() { System.out.printLn("Some String"); } Если нужно поподробнее, пишите в личку. Постараюсь изложить или дать ссыль на хороший материал.
Павел14 уровень, Санкт-Петербург
1 апреля, 09:42
Спасибо большое, я понял))
Александр8 уровень
28 марта, 15:10
Решил примерно за час без Collections.frequency() с первой попытки. Естественно, не с первой попытки запуска программы, а именно с первого скармливания кода валидатору. Вообще, стараюсь отдавать валидатору более-менее отлаженный код (хотя не всегда получается, конечно). Просто вставляю в main вызовы методов, вывожу свои коллекции на экран после работы этих методов. Если поведение норм, то комментирую лишнее через Ctrl +Shift+/ и отдаю на проверку. Если и тут не работает, смотрю на подсказки валидатора и мучаю дебаггер. Кстати, дебаггер пора уже осваивать -- штука не особенно сложная, если не вникать глубоко в её работу. В самом простом случае отмечаем строчку, на которой выполнение программы должно остановиться, запускаем дебаггер, после паузы продолжаем выполнение программы построчно и смотрим значения переменных. Всё. Теперь о способе решения. Вторую сущность (коллекцию) тоже пришлось использовать, но это тоже была HashMap. Только во второй были пары (имя, кол-во этого имени в hashmap1). В общем, насобирал в эту map2 информацию о количестве повторов для каждого имени, а потом методично в цикле выносил людей с этими именами из нашей основной map с помощью removeItemFromMapByValue().
ZooL9 уровень, Москва
27 марта, 20:26
Map<>(), это самое неудобная вещь в программировании, что только можно было придумать. есть куда более простые вещи для понимания и решения этих задач.
Никита19 уровень
24 марта, 15:01
Если кто - то переживает по поводу того, что "я не понимаю и лезу в комментарии, чтобы найти ответ", то, как по мне - не стоит переживать. Ведь в любом случае узнав ответ мы получаем какие-то знания и навыки, тем более если повторять урок несколько раз. А насчет программистов, я не думаю что они рождаются с книгой в голове и потом сидят на JavaRush и городят чего-то, зато сами! ... полнейший бред... они ведь тоже люди, и также когда изучают какую-то новую тему, поначалу не разбираются в ней. Они просто программировали и программируют. Они не бросили это дело и поэтому что-то умеют. Напишите свою точку зрения на это.
Александр8 уровень
28 марта, 14:52
"Тяжело в учении - легко в бою".
Яша9 уровень, Москва
21 марта, 06:08
есть довольно лаконичный и простой вариант решения данной задачи с использованием метода getOrDefault, вызываемого у Map в методе removeTheFirstNameDuplicates(), который должен удалять из словаря всех людей, имеющие одинаковые имена, создайте вспомогательную мапу (назовём ее counters), в которой ключом будет имя, а значением количество вхождений данного имени (количество повторов этого имени), т.е. <String, Integer> после того как создали эту вспомогательную мапу, нужно пройтись по исходной мапе, и для каждого имени ( в исходной мапе имя - это значение этой мапы), данное имя помещаем в нашу вспомогательную мапу (имя, (количество из counters либо 0, если данное имя не встретилось) +1 если данное имя встретилось) ну и после проходимся по уже заполненной нами вспомогательной мапе counters и для каждого имени (ключа нашей вспомогательной мапы) у которого его значение больше 1, удаляем через метод removeTheFirstNameDuplicates() по этому имени пару из исходной мапы. ниже приведу этот код для тех, кто не особо понял, что я написал и хочет посмотреть это наглядно. для тех, кто хочет сам еще подумать, в целом код ниже - это тупо ответ на данную задачу. так что я предупредил : )
Demid9 уровень
20 марта, 09:28