CRUD

  • 18
  • Недоступна
CRUD - Create, Read, Update, Delete. Программа запускается с одним из следующих наборов параметров: -c name sex bd -r id -u id name sex bd -d id
Вы не можете решать эту задачу, т.к. не залогинены.
Комментарии (770)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Alex Karpov
Уровень 28, Russian Federation
23 июня, 20:33
Прикольная задача... Условие не показалось запутанным... Но дату форматировал вообще написав отдельный метод, где использовал LocalDate и DateTimeFormatter... Опять же делал на ночь, и такое решение мне показалось проще... (до того самого момента, когда после правильной валидации не посмотрел решение авторов)... И опять, забыл проверку на null в args =\ Валидатор прошел со второго раза - исключительно потому, что в первом заходе забыл почистить лишние sout для самопроверки)))
vagu
Уровень 28, Москва, Russian Federation
23 июня, 17:36
Тык Вариант через switch (Тыкайте тот кто решил!)
Blynchik Работает в Pegas Touristik
21 июня, 13:49
А теперь расшифровка задания для тех, кто не обладает МегаМозгом, не решает эту задачу с первого раза левой рукой, попивая сок у себя на квартале, не понимает, что в этом задании от вас хотят. Чтобы понять, что от меня хотят убил целый день, но поняв, сразу все проясняется. Если короче, нас просят ввести параметры программы. От этого будет зависеть, какую операцию будет выполнять код. 1. Первым делом нам говорят, что программа запускается с помощью параметров. Так, -подумал я, - методы с параметрами я создавал и запускал, а вот программы вроде как не доводилось. Это первое, что ставит в тупик. Помните, как начинается стандартный метод main? - public static void main (String[] args){ Вот этот String[] args нам и нужен, в нем будут хранится наши параметры (аргументы программы). По сути, это метод с параметром в виде массива строк. Да, может, я капитан Очевидность, но подобная задача, мне попадается впервые. (Да, знал, что параметр main можно использовать, но не знал как). Параметры вводим, как написано в условии, Run -> Edit Configurations. Там есть специальная строка Arguments. Что там писать, расскажу ниже. 2.Второе, что мы видим в условии, это каша из букв, цифр, слов, -r, -u, 1990 и всего такого. Хочется сразу воскликнуть "Чего б.я?" из известного мема. Но обращаем внимание строку в условии "Пример параметров: -c Миронов м 15/04/1990 ". Вот примерно такое вы и должны вписать в Arguments. Где -с указывает программе, что нужно сделать с данными; Миронов - это name; м или ж - это sex; 15/04/1990 - это bd (birthday). To есть введя все это в Arguments, наш String[] args станет таким String[] args = {"-c","Миронов","м","15/04/1990"}, то есть получит свои элементы массива, которые и будут параметрами нашей программы. Кстати, если хотите дать Миронову имя, например, Павлик, то в Arguments нужно будет написать так: "Миронов Павлик" (вместе с кавычками), иначе программа подумает, что это два разных параметра, а не один большой.
Blynchik Работает в Pegas Touristik
21 июня, 14:37
3.Обращаем внимание на строки в условии "Значения параметров" (особенно на -c, -r, -u, -d). Получается, что от того, что мы введем в Arguments(в особенности в ячейке args[0]), будет зависеть работа программы. Обрати внимание на строку "Набор параметров", без корректных параметров в строке Arguments программа будет работать неправильно. Например,
если args[0] это -с{
    добавляем человека с заданными параметрами в конец списка allPeople
//чтобы добавить человека нам нужен будет новый person.
//Для этого в классе Person уже есть метод createMale и createFemale.
//Здесь тоже просто: если args[2] это м, то person = Person.createMale(name, birthday)
//и добавляем person в список (для ж аналогично)
выводим id (index) на экран} - id - это индекс ячейки в списке (длина списка -1)
В это части самое сложное - это разобраться с днем рождения. Он хранится у вас в ячейке args[3] в формате строки. Подсказка: эту строку нужно преобразовать в Date, да еще сохранить в определенном формате "dd/MM/yyyy". В этом поможет SimpleDateFormat, подсказка есть в условии, и это тоже просто гуглится. 4. С -r все просто тоже. Например, если в Arguments у нас записано -r 1, это значит нужно вывести на консоль всю информацию (имя, пол, дату рождения) о элементе списка allPersons под индексом 1. Не забывайте, что параметры у нас хранятся в виде строк. Поэтому args[1] нужно преобразовать в int. В классе Person все необходимые методы уже есть. Заметь, что формат вывода даты другой "dd-MMМ-yyyy". Я создал еще один SimpleDateFormat для этого. 5. -u - обновить данные о человеке. Что это значит? Хм... На деле это еще проще. -u id name sex bd По сути, если -u, то нам нужно заменить всю информацию из ячейки под индексом id из списка allPersons на то, что у нас в Arguments. Методы в Person тоже есть(setName, setSex и т.д.) 6. -d - здесь тупо allPersons.get(i).setName(null) и т.д. по всем параметрам
Анатолий
Уровень 20, Ужгород, Украина
18 июня, 12:44
Вы решили задачу лучше, чем 65% учеников. Вам удалось ее решить с 2 попытки. Среднее количество попыток для этой задачи 5.72. Всего эту задачу решили 21736 учеников. Очень понравилась задача)) из массы скучных эта привнесла интерес и чувство нестандартности)
Василий
Уровень 24
18 июня, 11:11
А только у меня при попытке обнулить дату (allPeople.get(ind).setBirthDate(null);) получается вот это? Exception in thread "main" java.lang.NullPointerException: date must not be null
Эльдар
Уровень 18, Ростов-на-дону
15 июня, 11:51
108 попыток......Это жесть просто,как убого написано задание!!Больше недели возился с этой задачей.Теперь понятно,почему многие бросают обучение после 17-го уровня.У меня у самого при решении этой задачи возникла мысль(впервые за все время учебы)-может,программирование действительно не мое и я потерял больше года времени впустую?Решил с помощью if-ов.разобрался в задаче,чувства удовлетворения не испытываю
Анатолий
Уровень 20, Ужгород, Украина
18 июня, 12:43
тут пожалуй не соглашусь, со второй попытки решил задачу, просто очень вчитывался в условие, после стаёт понятно, да и решение довольно таки простое. Раньше ругался на условия задач, но если прям сесть и перечитывать их вчитываясь в каждое условие, то в голове начинает рисоваться картинка как это должно быть.
Сонмониус
Уровень 33, Харьков, Ukraine
6 июня, 18:13
Столкнулся с проблемой, что метод main меняет формат текста введенных аргументов на windows-1251, в итоге когда начинаешь проверять что введено, постоянно выбивает ошибки, потому как условные "м" и "ж", сравниваются не с тем, что подали в аргумент, а с крокозябрами, которые получились на выходе. Как решить эту проблему так и не нашел, во всех настройках кодировка UTF-8 стоит. Для себя решил проблему добавлением такого блока в начало метода main
List<String> arguments = Arrays.asList(args).stream().map(e -> {
                    try {
                        byte[] eh = e.getBytes("Windows-1251");
                        return eh;
                    } catch (UnsupportedEncodingException ex) {
                        throw new RuntimeException(ex);
                    }
                })
                .map(e -> new String(e, StandardCharsets.UTF_8))
                .collect(Collectors.toList());
Который переводит текст из аргументов в список уже нормального формата, и работал дальше с ним. Но валидатор такое решение не принимает. Сделал рабочий вариант, он не проходит несколько пунктов (добавление и изменение списка, хотя все работает корректно). Потом попробовал подставить код из готового решения, ниже блока меняющего кодировку. Он как и мой - работает, но не проходит по тем же условиям. Сдал в итоге через готовое решение. Если кто-то найдет, как настроить нормальную кодировку в аргументах метода main, буду благодарен, я сегодня весь день убил не столько на саму задачу, сколько именно на этот пункт, но пришел только к такому вот костылю.
milyasow
Уровень 30, Москва, Russian Federation
30 мая, 22:07
Вводимую дату тоже нужно проверять на соответствие шаблону. Меня сбило с толку что
new Date("15/04/1990")
тоже нормально работает.
comrade_b
Уровень 26, Амстердам, Нидерланды
29 мая, 19:08
Предупреждение: валидатор в очередной раз не принимает switch через лямбду. Переводите сразу в старое исполнение с брейком.
Андрей
Уровень 19, Днепр, Ukraine
29 мая, 08:29
Среднее количество попыток для этой задачи 5.72. Всего эту задачу решили 21600 учеников.