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

  • 10
  • Недоступна
Зинаида Васильевна — классный руководитель 7-Б класса какой-то там террианской школы, подробности не важны. А важно то, что она дарит подарки ученикам в дни рождения. Везет не всем: летние именинники — в пролёте по причине каникул. Пишем программу для Зинаиды: создаем словарь с фамилиями и датами рождения, удаляем из него людей, родившихся летом.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (647)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Vasily
Уровень 8, Москва
undefined, 15:28
Сидел и не понимал, в чëм дело, пока не вспомнил, что месяцы считаются с нуля, а не с 1. Хороший прогер, наверно, привыкает всë считать с нуля, даже свои пальцы :)
Евгений
Уровень 17, Москва, Россия
5 сентября, 00:01
Увидел в одном из комментариев следующее "Месяцы отсчитываются с нуля. Другими словами январь это "0", а декабрь "11"." СПОЙЛЕР Фрагмент готового решения
int month = date.getMonth() + 1;

            if (month == 6 || month == 7 || month == 8) {
                map.remove(key);
            }
не понимаю зачем нужно увеличивать месяц на один, учитывая , что согласно решению летние месяца соответствуют значениям 6 7 8. Как тогда август проходит все это? мы берем август, его getMonth = 8, прибавляем 1 - итого для августа int month = 9 и по идее его не удалит из списка. Объясните кто чем может)
Вадим
Уровень 12
6 сентября, 14:41
здравствуй! месяцы отсчитываются с 0, почему так - хз, увеличение на 1цу переменной, и условия - чисто для упрощения восприятия. Можно было и не прописывать +1 к month, но тогда в условии пришлось бы прописывать if(month == 5 || month == 6 || month == 7)
Евгений
Уровень 17, Москва, Россия
7 сентября, 18:48
Спасибо, видимо они хранятся в массиве
Вадим
Уровень 12
2 сентября, 16:48
removeIf() - очень удобно использовать, не нужно с копиями мапы заморачиваться))
Борис
Уровень 8
undefined, 19:14
Вадим хорошего дня. "contains" не принимает, пишет, для "DATA" отсутствует. Чем заменить? Спасибо
Вадим
Уровень 12
undefined, 12:31
здравствуйте Борис! Без Вашего кода ответить трудно(опыта у меня - кот наплакал:) ). Вот, что пишут про contains: Метод contains() – это метод Java, позволяющий проверить, содержит ли String другую подстроку или нет. Возвращает логическое значение, поэтому его можно использовать непосредственно внутри операторов if. Источник: https://java-blog.ru/osnovy/metod-contains-java
Vadim Zhalnin
Уровень 15
30 июля, 11:24
При решении подобных задач, при отладке кода, важно смотреть, какие промежуточные значения находятся в массивах, коллекциях или переменных. После написанной операции вставляем: System.out.println(map); System.out.println(copyMap); или System.out.println(a); Можно вставить сразу в нескольких местах, скомпилировать и, таким образом увидеть, где написанный код работает не неправильно. Это экономит время на исправление, как банальных опечаток, так и принципиальных ошибок. При этом в мейне нужно прописать необходимый метод: public static void main(String[] args) throws ParseException { removeAllSummerPeople(createMap()); } А перед валидацией не забыть все тесты удалить.
Simpson
Уровень 10, Белгород, Россия
14 июля, 10:16
С ума сойти, я почти месяц ее делал. но все же добил с подсказками. Тут про класс Date https://javarush.ru/groups/posts/1941-kak-ne-poterjatjhsja-vo-vremeni--datetime-i-calendar для создания копии мапы используйте mapnew.putAll(map). Вы не сможете удалить ничего из оригинала в процессе итерации если будете работать с ним. не используйте летние месяцы в значении, валидатор не примет.
piersto
Уровень 17, Montreal, Canada
9 июля, 20:20
После того как решил (с 32-й попытки) кажется, что там было решать??! Это же как два пальца об асфальт!!! 😓 Сначала добавляем народ в Мар. Это просто. Потом нужно пройти по этому Мар и удалить из него тех, кто не родился в июне, июле, августе. Делать цикл и удалять из того же Мар нельзя. Значит гуглим как сделать его копию. Гуглим как из строки получить месяц и обращаем внимание в каком формате мы его получаем. Делаем цикл по копии нашего Мар, а удаляем народ из оригинала. Не забываем, что номера месяцев не совпадают с номерами месяцев! -- Шутка! Январь - это не 1, а 0.
Дима
Уровень 10, Новая Каховка, Украина
14 июля, 09:50
Ты бы лучше вместо слова "гуглим" вставил бы ссылки на статьи.
Максим Белоусов
Уровень 14, Москва, Россия
25 июня, 20:44
Лично я решаю так: 1. Смотрим на задачу, читаем требования 2. Если не понятно по какому пути двигаться читаем статьи/документацию по материалу. В данном случае по Date и удалению из Map.
и еще ребята, объясните пожалуйста, как так создали копию Мэпы Map<String, Date> copy = new HashMap<>(map); конструктора, в котором было бы задано копирование - не нашел в коде администрации
piersto
Уровень 17, Montreal, Canada
9 июля, 20:16
https://www.geeksforgeeks.org/how-to-clone-a-map-in-java/
Товарищи, доброе утро! есть немного вопросов по задачке (подсмотрел решение администрации) подскажите пожалуйста: -зачем создавали копию карты и далее работали с ней -если я правильно понял, то эта копия нам потребовалась только, чтобы найти ключи (имена) людей родившихся летом. А потом уже полученные ключи(имена) применить для удаления пар УЖЕ В НАШЕМ ИСХОДНОМ МЭП почему нельзя было сразу работать с исходной Мэп?
piersto
Уровень 17, Montreal, Canada
9 июля, 20:18
"... в цикле for each нельзя удалять элементы той коллекции, которую этим циклом перебираешь."
uncle-fro
Уровень 11
25 мая, 13:33
Заносил даты БОЛЬШИМИ буквами(прим: JUNE), и считал, что проверять тоже нужно dateFormat.format(it.next().getValue()).contains("JUNE"), а оказывается правильно "June"😌 ПЫСЫ. Почему-то в проекте не JavaRush не смог "dateFormat.parse" использовать, parse подчеркивает красным. Вроде все импортировано, может кто знает в чем проблема?
Kirill
Уровень 11, Санкт-Петербург, Россия
1 июня, 20:56
ParseException
uncle-fro
Уровень 11
4 июня, 12:23
Спасибо