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

  • 10
  • Недоступна
Зинаида Васильевна — классный руководитель 7-Б класса какой-то там террианской школы, подробности не важны. А важно то, что она дарит подарки ученикам в дни рождения. Везет не всем: летние именинники — в пролёте по причине каникул. Пишем программу для Зинаиды: создаем словарь с фамилиями и датами рождения, удаляем из него людей, родившихся летом.
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (658)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Евгений N
Уровень 13
13 апреля, 15:27
понравилось что валидируются и альтернативные решения! я не создавал копию map, а складывал подлежащие удалению ключи в другой set, потом бегал по нему и удалял из исходной map.
Alexey Korshikov
Уровень 11
8 апреля, 20:35
dateFormat.parse не работает! Вообще никак. Ни с одним форматом, взятым из документации. Это какой то бздец.
Александр
Уровень 8, Москва, Россия
26 марта, 18:39
Голову сломал из-за того, что выводилась ошибка при удалении key напрямую из цикла с map. Нужно делать копию map и с помощью нее удалять из map.
24 марта, 11:01
Не совсем понимаю, в каких случаях нужно создавать копию, а в каких можно работать с исходной map. В чём разница, поясните?
528
Уровень 15
16 мая, 19:41
насколько я понял, можно городить что угодно в методах, с одной лишь разницей: - если метод void, все твои действия должны быть направлены на изменение того что к тебе пришло в (...) и к концу метода, пришедший параметр (именно пришедший), должен как-то поменяться всеми твоими манипуляциями - а если метод не void, прими значение из параметра (...), а в return верни тот тип, который обещал вернуть объявляя метод не судите строго, я на 14 уровне, это так понимаю, поправьте если не так, буду тоже благодарен 🙏
Абдурахман
Уровень 12
11 марта, 05:34
тем кто отчаялся и не может найти решения просто следуйте инструкций и попытайтесь понять логику 1) Внутри метода сначала создаем копию нашего переданного списка пример:
Map<String, Date> copy = new Hashmap<>(map);
// copy наш скопированный список
// map это список который мы получаем в параметре метода
//public static void removeAllSummerPeople(Map<String, Date> map)
2) создаем цикл for внутри создаем переменную типа String и заносим туда значения ключей нашего скопированного списка. (фрагмент ниже если не поняли)
String key : copy.keySet()
3) Внутри этого же цикла создаем переменную типа Date и заносим туда ключи нашего скопированного списка с помощью метода get()
Date date = copy.get(key);
4) Внутри этого же цикла создаем переменную типа int и получаем значение месяца с помощью переменного типа Date используя getMonth()
int month = date.getMonth()
5) Внутри этого же цикла создаем условия if проверяем месяцы лета
if ( month == лето || month == лето || month == лето)
{
    Удаляем ключ с основого списка с помощью remove();
}
Евгений N
Уровень 13
13 апреля, 15:42
п2 я бы описал так (если уж всё разжевывать): в карте copy (как и в карте map) у нас 2 множества: ключей keySet() и значений values() создаем цикл for each над множеством именно ключей = copy.keySet(), каждый ключ по-очереди будет присвоен переменной цикла key, далее по нему в п.3 достаем значение-дату.
Valkery
Уровень 29, Белгород, Россия
9 февраля, 12:30
Непонимаю, почему в правильном решении через цикл перебираем значение .keySet() Нам же нужно хотя бы пару получить, или значение, и как тогда отбирать месяц, если мы получили лишь ключи?
Vasily
Уровень 15, Москва
15 октября 2021, 15:28
Сидел и не понимал, в чëм дело, пока не вспомнил, что месяцы считаются с нуля, а не с 1. Хороший прогер, наверно, привыкает всë считать с нуля, даже свои пальцы :)
Евгений N
Уровень 13
13 апреля, 15:03
однако даже в Date дни считаются с 1. Просто java пошла от C++, C++ от С, С от ассемблера, а в ассемблере нужно было экономить, указатель типа "байт" если считать с 0, то на 1 значение больше поместится! А Паскаль, T-SQL, PL-SQL придумали люди, там от 1 считается :)
Евгений
Уровень 22, Москва, Россия
5 сентября 2021, 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 и по идее его не удалит из списка. Объясните кто чем может)
Вадим
Уровень 22
6 сентября 2021, 14:41
здравствуй! месяцы отсчитываются с 0, почему так - хз, увеличение на 1цу переменной, и условия - чисто для упрощения восприятия. Можно было и не прописывать +1 к month, но тогда в условии пришлось бы прописывать if(month == 5 || month == 6 || month == 7)
Евгений
Уровень 22, Москва, Россия
7 сентября 2021, 18:48
Спасибо, видимо они хранятся в массиве
Вадим
Уровень 22
2 сентября 2021, 16:48
removeIf() - очень удобно использовать, не нужно с копиями мапы заморачиваться))
Борис
Уровень 31
15 октября 2021, 19:14
Вадим хорошего дня. "contains" не принимает, пишет, для "DATA" отсутствует. Чем заменить? Спасибо
Вадим
Уровень 22
16 октября 2021, 12:31
здравствуйте Борис! Без Вашего кода ответить трудно(опыта у меня - кот наплакал:) ). Вот, что пишут про contains: Метод contains() – это метод Java, позволяющий проверить, содержит ли String другую подстроку или нет. Возвращает логическое значение, поэтому его можно использовать непосредственно внутри операторов if. Источник: https://java-blog.ru/osnovy/metod-contains-java
Vadim Zhalnin
Уровень 17
30 июля 2021, 11:24
При решении подобных задач, при отладке кода, важно смотреть, какие промежуточные значения находятся в массивах, коллекциях или переменных. После написанной операции вставляем: System.out.println(map); System.out.println(copyMap); или System.out.println(a); Можно вставить сразу в нескольких местах, скомпилировать и, таким образом увидеть, где написанный код работает не неправильно. Это экономит время на исправление, как банальных опечаток, так и принципиальных ошибок. При этом в мейне нужно прописать необходимый метод: public static void main(String[] args) throws ParseException { removeAllSummerPeople(createMap()); } А перед валидацией не забыть все тесты удалить.