Валидатор настаивает: "При запуске программы с параметром -d программа должна логически удалять человека с заданным id в списке allPeople.
Убедись, что при удалении данных человека размер списка allPeople не меняется."
вариант для запуска с параметрами из условия: -c Миронов м 15/04/1990
все проверки (закомментированы) проходит.
по всем проверкам проходит, размер массива при логическом удалении не меняется.
при попытке вызвать id удаленного товарища выкидывает NullPointerException.
Вывод в консоль:
"C:\Users\user\Documents\JAVA обучение\JavaRush projects\JavaRushTasks\out\production\2.JavaCore" com.javarush.task.task17.task1710.Solution -c Миронов м 15/04/1990
2
Это мы ввели:
Иванов Иван м 14-мая-2019
Петров Петр м 14-мая-2019
Миронов м 15-апр-1990
Ввод закончен.
Меняем Миронова на Королеву...
Королева ж 01-янв-1991
size of allPeople: 3
#2 удален!
size of allPeople: 3
com.javarush.task.task17.task1710.Person@6e0be858
com.javarush.task.task17.task1710.Person@61bbe9ba
com.javarush.task.task17.task1710.Person@610455d6
Process finished with exit code 0
package com.javarush.task.task17.task1710;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.*;
/*
CRUD
*/
public class Solution {
public static 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) {
/*проверка аргументов запуска:
for (int i = 0; i < args.length; i++)
System.out.println("args[" + i + "]: " + args[i]); */
switch (args[0]) {
case ("-c"):
createNewPerson(args[1],args[2],args[3]);
break;
case ("-u"):
updatePerson(args[1], args[2], args[3], args[4]);
break;
case ("-d"):
deletePerson(args[1]);
case ("-i"):
infoPerson(args[1]);
break;
default:
System.out.println("Unknown command. Set -c / -u / -d / -i command.");
break;
}
/*
//для проверки
System.out.println("Это мы ввели: ");
infoPerson("0");
infoPerson("1");
infoPerson("2");
System.out.println("Ввод закончен.");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {}
updatePerson("2", "Королева", "ж", "01/01/1991");
System.out.println("Меняем Миронова на Королеву...");
infoPerson("2");
System.out.println("size of allPeople: " + allPeople.size());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {}
deletePerson("2");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {}
System.out.println("#2 удален!");
System.out.println("size of allPeople: " + allPeople.size());
for (Person p : allPeople){
System.out.println(p);}
//конец проверок
*/
}
/* методы работы с Person:
-c - добавляет человека с заданными параметрами в конец allPeople, выводит id (index) на экран
-u - обновляет данные человека с данным id
-d - производит логическое удаление человека с id, заменяет все его данные на null
-i - выводит на экран информацию о человеке с id: name sex (м/ж) bd (формат 15-Apr-1990) */
private static void createNewPerson(String name, String sex, String bd) {
Person person = null;
String personName = name;
Sex personSex = choseSex(sex);
Date personBdate = chooseBday(bd);
if (personSex.equals(Sex.MALE)){
person = Person.createMale(personName, personBdate);
} else if (personSex.equals(Sex.FEMALE)){
person = Person.createFemale(personName, personBdate);
}
allPeople.add(person);
System.out.println(allPeople.indexOf(person)); //вывод id добавленного Person
}
private static void updatePerson(String id, String name, String sex, String bd) {
Person person = allPeople.get(Integer.parseInt(id));
person.setName(name);
person.setSex(choseSex(sex));
person.setBirthDate(chooseBday(bd));
}
private static void deletePerson(String id) {
int x = Integer.parseInt(id);
Person person = allPeople.get(x);
person.setName(null);
person.setSex(null);
person.setBirthDate(null);
}
private static void infoPerson(String id) {
int x = Integer.parseInt(id);
Person person = allPeople.get(x);
String sex;
if (person.getSex().equals(Sex.MALE)) sex = "м";
else sex = "ж";
SimpleDateFormat sm = new SimpleDateFormat("dd-MMM-yyyy");
String bDay = sm.format(person.getBirthDate());
String message = person.getName() + " " + sex + " " + bDay;
System.out.println(message);
}
//преводит строку с ДР в формат даты
public static Date chooseBday(String s) {
Date personBday = null;
DateFormat format = new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH);
try {
personBday = format.parse(s);
} catch (ParseException e) {
//System.out.println("Указан неправильный формат даты рождения");
e.printStackTrace();
}
return personBday;
}
//определяет пол - м/ж
public static Sex choseSex(String s) {
Sex personSex = null;
try {
if (s.equals("м")) personSex = Sex.MALE;
if (s.equals("ж")) personSex = Sex.FEMALE;
} catch (UnknownFormatFlagsException e){
//System.out.println("Пол указан в неправильном формате");
e.printStackTrace();
}
return personSex;
}
}