Добрая Зинаида и летние каникулы

  • 10
  • Недоступна
Зинаида Васильевна — классный руководитель 7-Б класса какой-то там террианской школы, подробности не важны. А важно то, что она дарит подарки ученикам в дни рождения. Везет не всем: летние именинники — в пролёте по причине каникул. Пишем программу для Зинаиды: создаем словарь с фамилиями и датами рождения, удаляем из него людей, родившихся летом.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (462)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий вы должны авторизоваться
Вадим10 уровень, Москва
28 мая, 18:24
Не забывайте что июнь хоть и шестой месяц в году, в массиве имеет значение 5, ибо у января 0.
Maxim Belich14 уровень, Минск
28 мая, 17:21
При самостоятельном решении подобных задач может сложиться ложное чувство будто бы есть просветление в мозгах о Java. Не обольщайтесь, дальше будет только хуже) Это лишь синтаксис языка..
Andrew8 уровень, Москва
воскресенье, 19:59
ну все хана, на 7м писали что 8 .опа, тут обещают что дальше вообще хуже, а что на 31 будет аж жуть, но "дорогу осилит идущий"
Елена9 уровень
27 мая, 18:45
Задача прошла валидацию, только когда летние месяцы установила: Май, Июнь, Июль.
Ксенія Українка20 уровень, Киев
воскресенье, 19:40
январь - месяц №0
Максим10 уровень, Москва
26 мая, 15:23
А почему не хочет искать метод containsValue?? Можно было бы в условии написать :
if(pair.containsValue("JUNE")
удаляем
Maxim Belich14 уровень, Минск
28 мая, 17:18
В данном случае ты ищешь строку JUNE.. А у тебя в мапе Map<String,Date> т.е., значение объект типа Date,а не строка.
25 мая, 11:18
Не забудьте добавить в main - throws ParseException, без этой декларации выдавало ошибку. Очень удобный метод month.getMonth() в идее указан, как устаревший, вместо него предлагает использовать month.getTime(), но как в него передать номера месяцев?
Mihail Klimenko9 уровень, Краснодар
22 мая, 17:52
Все когда нибудь заканчивается, даже количество отказов у валидатора :) При заполнении словаря месяц нужно обязательно писать без сокращений. Метод отсеивания несчастных, родившихся летом, я реализовал через второй словарь (который копия первого). Цикл foreach() перебирает элементы второго словаря, при этом if() проверяет, не попал ли номер месяца в интервал от 4 до 8. И если попал - удаляется KEY оригинального словаря (а вместе с key удаляется весь элемент).
Aleksandr Iashkin20 уровень, Murmansk
22 мая, 22:35
У меня работает и с сокращениями месяцев. Например: - "JUN 16 2012" - "JUL 24 2011" - "AUG 16 2013" Java 8+: Ещё откопал новую фишку языка - предикаты. Удаление одним движением:
map.values().removeIf(
        date -> date.getMonth() == Calendar.JUNE
                || date.getMonth() == Calendar.JULY
                || date.getMonth() == Calendar.AUGUST);
Andrew8 уровень, Москва
воскресенье, 19:45
с 5 по 7 имеется ввиду
Aleksandr19 уровень, Wroclaw
20 мая, 14:14
Следите за правильным написанием месяцев в createMаp(); 😬 Итератор — это специальный объект у коллекции, который помогает обойти все элементы коллекции и не повторяться. Iterator<Тип> it = имя.iterator(); имя — это имя переменной-коллекции. Суть в том, что нельзя менять коллекцию, пока вы обходите ее с помощью итератора. Необходимо использовать итератор явно, а именно его метод remove().
Ivan10 уровень, Череповец
воскресенье, 09:11
"использовать итератор явно, а именно его метод remove()." Ах вот оно как😄 А я потупил, не получается и решил по другому. Теперь буду знать, спасибо, добрый человек.
Георгий14 уровень, Москва
17 мая, 17:10
Ужасно то, что сложнее было придумать/вспомнить/нагуглить, как удалить чертово значение из hashmap в цикле, чем нагуглить определение месяца...
16 мая, 10:48
если не знаете как сделать, читайте https://javarush.ru/quests/lectures/questsyntaxpro.level13.lecture01
Alex Ter9 уровень, Великий Новгород
11 мая, 15:08
я один только в процессе решения данной задачи узнал что:
pair.removie();
не сработает? как и:
for (Map.Entry<String, Date> pair : map.entrySet()){
map.removie(pair.getKey());
}
Искандар8 уровень, Москва
16 мая, 08:51
Работает, только если сперва создать копию map, затем пройтись по нему, а удалить из реального map. Так как, в коллекциях нельзя одновременно пройтись и удалить. Map<String, Date> newMap = new HashMap<>(map); for (Map.Entry<String, Date> pair : newMap.entrySet()) { String name = pair.getKey(); Date data = pair.getValue(); int month = data.getMonth(); if (month == 5 || month == 6 || month == 7) { map.remove(name); }
16 мая, 10:42
через итератор, потом while iterator hasNext, тут в цикле добавляешь услове и в нем удалаяешь iterator.remove();
Alex Ter9 уровень, Великий Новгород
16 мая, 14:44
to Искандер: именно так и сделал. просто нигде в лекциях не говорилось, что удалять через итератор проходом по единственному мап не получится
Alex Ter9 уровень, Великий Новгород
16 мая, 14:44
to Тимофей Колосов: в моем методе и сделано через итератор. и не удаляло.
A A13 уровень, Москва
23 мая, 12:48
Считай, что ВПР из excel ))