level08.lesson08.task04

класс DATE в для текущей постановки задачи устарел.
Вместо него нужно применять класс GregorianCalendar.
Задача решена с его использованием, и, естественно, не компилируется на сервере. Когда будет пофиксено решение?

29 комментариев

pupzemli
присоединяюсь к вопросу, работает, но не проходит тест

package com.javarush.test.level08.lesson08.task04;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/* Удалить всех людей, родившихся летом
Создать словарь (Map<String, Date>) и занести в него десять записей по принципу: «фамилия» - «дата рождения».
Удалить из словаря всех людей, родившихся летом.
*/

public class Solution
{
    public static Map<String, Date> createMap()
    {
        Map<String, Date> map = new HashMap<String, Date>();
        map.put("Stallone", new Date("JUNE 1 1980"));
        map.put("Stallone1", new Date("JULY 1 1980"));
        map.put("Stallone2", new Date("AUGUST 1 1980"));
        map.put("Stallone3", new Date("MAY 1 1980"));
        map.put("Stallone4", new Date("APRIL 1 1980"));
        map.put("Stallone5", new Date("APRIL 2 1980"));
        map.put("Stallone6", new Date("APRIL 3 1980"));
        map.put("Stallone7", new Date("APRIL 4 1980"));
        map.put("Stallone8", new Date("APRIL 5 1980"));
        map.put("Stallone9", new Date("APRIL 8 1980"));

        return map;

    }

    public static void removeAllSummerPeople(Map<String, Date> map)
    {
        Map<String, Date> map2 = new HashMap<String, Date>(); //копируем map в map2
        for (Map.Entry<String,Date> item :map.entrySet()){
            map2.put(item.getKey(), item.getValue());
        }

        for (Map.Entry<String,Date> item :map2.entrySet()){       //ищем в map2, удаляем в map
            int month=item.getValue().getMonth();
            if (month==6|month==7|month==8) {map.remove(item.getKey());}
        }
//        for (Map.Entry<String,Date> item :map.entrySet()){
//            System.out.println(item.getKey()+" "+item.getValue());
//        }
    }

    public static void main(String[] args){
        Map<String, Date> map = createMap();
        removeAllSummerPeople(map);
    }
}

an_pi
  • an_pi
  • 0
  • Комментарий отредактирован 2016-03-06 10:28:08 пользователем an_pi
У тебя неправильно заданы месяцы, июнь — 6, июль — 7, август — 8, посмотри класс Date.
pupzemli
  • pupzemli
  • 0
  • Комментарий отредактирован 2016-03-06 16:20:02 пользователем pupzemli
спасибо, но даже с изменениями тест не проходит, но прекрасно работает
package com.javarush.test.level08.lesson08.task04;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/* Удалить всех людей, родившихся летом
Создать словарь (Map<String, Date>) и занести в него десять записей по принципу: «фамилия» - «дата рождения».
Удалить из словаря всех людей, родившихся летом.
*/

public class Solution
{
    public static Map<String, Date> createMap()
    {
        Map<String, Date> map = new HashMap<String, Date>();
        map.put("Stallone", new Date("JUNE 1 1980"));
        map.put("Stallone1", new Date("JULY 1 1980"));
        map.put("Stallone2", new Date("AUGUST 1 1980"));
        map.put("Stallone3", new Date("MAY 1 1980"));
        map.put("Stallone4", new Date("APRIL 1 1980"));
        map.put("Stallone5", new Date("SEPTEMBER 2 1980"));
        map.put("Stallone6", new Date("JUNE 3 1980"));
        map.put("Stallone7", new Date("MARCH 4 1980"));
        map.put("Stallone8", new Date("FEBRUARY 5 1980"));
        map.put("Stallone9", new Date("JANUARY 8 1980"));

        return map;

    }

    public static void removeAllSummerPeople(Map<String, Date> map)
    {
        Map<String, Date> map2 = new HashMap<String, Date>(map); //копируем map в map2

        for (Map.Entry<String,Date> item :map2.entrySet()){       //ищем в map2, удаляем в map
            int month=item.getValue().getMonth();
            if (month==5|month==6|month==7) {map.remove(item.getKey());}
        }
//        for (Map.Entry<String,Date> item :map.entrySet()){
//            System.out.println(item.getKey()+" "+item.getValue());
//        }
    }

    public static void main(String[] args){
        Map<String, Date> map = createMap();
        removeAllSummerPeople(map);
    }
}
an_pi
  • an_pi
  • 0
  • Комментарий отредактирован 2016-03-07 10:34:01 пользователем an_pi
Сбрось задачу, и посмотри на метод removeAllSummerPeople, у тебя в конструкторе уже есть map, а ты его копируешь, зачем?
pupzemli
  • pupzemli
  • 0
  • Комментарий отредактирован 2016-03-07 11:50:59 пользователем pupzemli
если удалять в map который перебираем ConcurrentModificationException
an_pi
Конечно, нужно делать через Iterator:
Iterator<Map.Entry<String, Date>> iterator = map.entrySet().iterator();
SonicBIast
Привет! Как ты можешь утверждать, что твоя прога работает !? Ты её тестил?
Ну если она все таки работает, тогда объясни вот эту строчку своего кода!
if (month==6|month==7|month==8) {map.remove(item.getKey());}
pupzemli
  • pupzemli
  • 0
  • Комментарий отредактирован 2016-03-06 16:25:39 пользователем pupzemli
что в этой строчке непонятно?
если такой номер месяца удалить из map
поменял номера на -1, так как забыл о 0-вом элементе, все работает, кроме прохождения теста
SonicBIast
Слушай я же тебе даже строку с ошибкой показал!
— Насчет 0 элемента правильно сделал!
— Прогу я так понял ты 100% не тестил! Если бы тестил все увидел бы!
— Мой совет, почитай про оператор: «логическое ИЛИ», «логическое И»
— после этого тебе все станет ясно и ты больше такой ошибки в жизни не допустишь!
pupzemli
  • pupzemli
  • 0
  • Комментарий отредактирован 2016-03-06 22:24:13 пользователем pupzemli
про логические операторы я в курсе,
если (номер месяца 5)ИЛИ(номер месяца 6)ИЛИ(номер месяца 7) — удалить эту запись
если вы про то что их 3шт, так можно и 100 условий написать

может я в джава и не спец, но время от времени пересекаюсь с программированием, так для себя, еще со времени борланд5, и пару сайтов на пхп накидал, не пойму, что я неправильно написал? уткните носом

и насчет тестирования, что вы имеете ввиду? я написал разные месяца, программа срабатывает, удаляет летние, можете проверить, раскоментируйте вывод
или вы про какое-то другое тестирование?
SonicBIast
if (month > 4 && month < 8 )

попробуй заменить свой if на этот!
pupzemli

один фиг(
pupzemli

оба варианта работают идентично
вывод правильный
SonicBIast
вот это в мэйн!!!
for (Map.Entry<String, Date> pair : map.entrySet())
        {
            System.out.println(pair.getKey() + " - " + pair.getValue());
        }
SonicBIast
после вызова метода
pupzemli

ваш код идентичен моему, по разному только переменные, у вас pair — у меня item
SonicBIast
  • SonicBIast
  • 0
  • Комментарий отредактирован 2016-03-06 23:20:20 пользователем SonicBIast
не идентичен, в моем есть дефис :)
— короче я так понял нужен вывод коллекции, можешь в свой добавить дефис и пробуй сдать!
pupzemli
да ладно)
короче, останется в плагине это задание нерешенным, будет мозолить глаз, придумали какую-то логику и хотят увидеть, или действительно проблема в Date
SonicBIast
попробуй сдать с выводом коллекции «фамилия» — «дата рождения»
добавь дефис, елки-палки!
pupzemli
вывода в условии нет
хотя уже пробовал
SonicBIast
с дефисом пробовал?
pupzemli
  • pupzemli
  • 0
  • Комментарий отредактирован 2016-03-06 23:45:38 пользователем pupzemli
и с дефисом, и с пробелом, и с пробел-дефис-пробел
да хрен уже с этой задачей
SonicBIast
Беда! :( слушай могу скинуть код если надо посмотришь как я решал
pupzemli
ты все хранишь?))
давай, если не прокатит то точно дело в Date
SonicBIast
скинул! смотри в личке
SonicBIast
Ну я просто все в ИДЕЕ решаю, там все в плагине остается
pupzemli
твой вариант прошел, видимо логика проверки где-то хромает, спасибо
SonicBIast
  • SonicBIast
  • 0
  • Комментарий отредактирован 2016-03-07 12:15:12 пользователем SonicBIast
Да, насчет твоего if, ты использовал побитовый оператор ИЛИ, а он работает не так как логический ИЛИ, в общем почитай про них — освежи знания. Удачи!
pupzemli
единственным пока объяснением вижу что по причине устаревшего Date вылазят ворнинги
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.