Условие:

CRUD 2

CrUD Batch — multiple Creation, Updates, Deletion

Программа запускается с одним из следующих наборов параметров:

-c name1 sex1 bd1 name2 sex2 bd2 ...

-u id1 name1 sex1 bd1 id2 name2 sex2 bd2 ...

-d id1 id2 id3 id4 ...

-i id1 id2 id3 id4 ...

Значения параметров:

name — имя, String

sex — пол, «м» или «ж», одна буква

bd — дата рождения в следующем формате 15/04/1990

-с — добавляет всех людей с заданными параметрами в конец allPeople, выводит id (index) на экран в соответствующем порядке

-u — обновляет соответствующие данные людей с заданными id

-d — производит логическое удаление человека с id, заменяет все его данные на null

-i — выводит на экран информацию о всех людях с заданными id: name sex bd

id соответствует индексу в списке

Формат вывода даты рождения 15-Apr-1990

Все люди должны храниться в allPeople

Порядок вывода данных соответствует вводу данных

Обеспечить корректную работу с данными для множества нитей (чтоб не было затирания данных)

Используйте Locale.ENGLISH в качестве второго параметра для SimpleDateFormat

Пример вывода для параметра -і с двумя id:

Миронов м 15-Apr-1990

Миронова ж 25-Apr-1997

Вот код:

package com.javarush.task.task17.task1711;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

/* 
CRUD 2
*/

public class Solution {
    public static volatile List<Person> allPeople = new ArrayList<Person>();

    static {
        allPeople.add(Person.createMale("Иванов Иван", new Date()));  //сегодня родился    id=0
        allPeople.add(Person.createMale("Петров Петр", new Date()));  //сегодня родился    id=1
    }

    public static void main(String[] args) throws ParseException {
        switch (args[0]) {
            case "-c" :
                synchronized (allPeople) {
                    for (int i = 1; i < args.length; i+=3) createPerson(args[i], args[i + 1], args[i + 2]);
                }
                break;
            case "-u":
                synchronized (allPeople) {
                    for (int i = 1; i < args.length; i+=4) updatePerson(Integer.parseInt(args[i]), args[i+1], args[i+2], args[i+3]);
                }
                break;
            case "-i":
                synchronized (allPeople) {
                    for (int i = 1; i < args.length; i++)  showPerson(Integer.parseInt(args[i]));
                }
                break;
            case "-d":
                synchronized (allPeople) {
                    for (int i = 1; i < args.length; i++) deletePerson(Integer.parseInt(args[i]));
                }
                break;
        }
    }

    public static void createPerson(String name, String sex, String birthday) throws ParseException{
        if (sex.equals("ж")) allPeople.add(Person.createFemale(name, new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH).parse(birthday)));
        else if (sex.equals("м")) allPeople.add(Person.createMale(name, new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH).parse(birthday)));
        System.out.println(allPeople.size() - 1);
    }

    public static void updatePerson(int id, String name, String sex,String birthday) throws ParseException {
        allPeople.get(id).setName(name);
        allPeople.get(id).setSex(sex.equals("ж") ? Sex.FEMALE : Sex.MALE);
        allPeople.get(id).setBirthDay(new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH).parse(birthday));
    }

    public static void showPerson(int id) {
        SimpleDateFormat date = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
        String sex = allPeople.get(id).getSex().equals("ж") ? "ж" : "м";
        System.out.println(allPeople.get(id).getName() + " " + sex + " " + date.format(allPeople.get(id).getBirthDay()));
    }

    public static void deletePerson(int id) {
        allPeople.get(id).setName(null);
        allPeople.get(id).setSex(null);
        allPeople.get(id).setBirthDay(null);
    }
}

Валидатор говорит:

При параметре -i программа должна выводить на экран данные о всех людях с заданными id по формату указанному в задании.

Вот результат вывода на консоль:

Иванов Иван м 03-Mar-2017
Петров Петр м 03-Mar-2017

Process finished with exit code 0

Где я ошибся?

задан 03 Мар, 05:56

yukpun's gravatar image

yukpun
585
одобрено: 12%

изменено 03 Мар, 07:19


Ошибка в showPerson в определении пола

ссылка

опубликован 03 Мар, 07:20

vampirit's gravatar image

vampirit
5.9k19
одобрено: 31%

Спасибо тебе человечище! Пол дня глаза ломал.

(03 Мар, 07:34) yukpun

Что-то я не догоняю, как эта программа будет воспринимать таких людей как Иванов Иван на входе, не говоря уже про отчество... Как она вообще могла пройти тестирование? Или давайте мы в "предустановленных данных" заморочим человека, а потом плюнем на все, и будем принимать name в виде только одного слова?

ссылка

опубликован 20 Мар, 17:15

Peter%20Bardashev's gravatar image

Peter Bardashev
815
одобрено: 11%

Ваш ответ
включить просмотр

Следить за вопросом

По Email:

После авторизации вы сможете подписаться на любые обновления здесь

Основы Markdown

  • *italic* or _italic_
  • **bold** or __bold__
  • ссылка:[текст](http://url.com/ "заголовок")
  • изображение?![alt текст](/path/img.jpg "заголовок")
  • нумерованный список: 1. Foo 2. Bar
  • Для того чтобы добавить разрыв строки просто добавьте два пробела.
  • основные HTML тэги, также поддерживаются

Тэги:

×3,548
×1,539

Задан: 03 Мар, 05:56

Просмотров: 127 раз

Отредактирован: 20 Мар, 17:15