Значит так, вот что я написал без подсказок:
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
}
static SimpleDateFormat inDate = new SimpleDateFormat("dd/MM/yyyy");
static SimpleDateFormat outDate = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
public static void main(String[] args) throws ParseException{
switch (args[0]) {
case "-c":
synchronized (allPeople) {
int n = 1;
try {
while (args[n] != null) {
if (args[n + 1].equals("м")) {
allPeople.add(Person.createMale(args[n], inDate.parse(args[n + 2])));
System.out.println(allPeople.size() - 1);
} else if (args[n + 1].equals("ж")) {
allPeople.add(Person.createFemale(args[n], inDate.parse(args[n + 2])));
System.out.println(allPeople.size() - 1);
}
n = n + 3;
}
break;
} catch (IndexOutOfBoundsException e) {
break;
}
}
case "-u":
synchronized (allPeople) {
int n = 1;
try {
while (args[n] != null) {
(allPeople.get(Integer.parseInt(args[n]))).setName(args[n + 1]);
if ((args[n + 2]).equals("м")) {
(allPeople.get(Integer.parseInt(args[n]))).setSex(Sex.MALE);
} else if ((args[n + 2]).equals("ж")) {
(allPeople.get(Integer.parseInt(args[n]))).setSex(Sex.FEMALE);
}
(allPeople.get(Integer.parseInt(args[n]))).setBirthDate(inDate.parse(args[n + 3]));
n = n + 4;
}
break;
} catch (IndexOutOfBoundsException e) {
break;
}
}
case "-d":
synchronized (allPeople) {
int n = 1;
try {
while (args[n] != null) {
allPeople.get(Integer.parseInt(args[n])).setName(null);
allPeople.get(Integer.parseInt(args[n])).setSex(null);
allPeople.get(Integer.parseInt(args[n])).setBirthDate(null);
n = n + 1;
}
break;
} catch (IndexOutOfBoundsException e) {
break;
}
}
case "-i":
synchronized (allPeople) {
int n = 1;
try {
while (args[n] != null) {
if ((allPeople.get(Integer.parseInt(args[n])).getSex()).equals(Sex.MALE)) {
System.out.println(allPeople.get(Integer.parseInt(args[n])).getName() + " " + "м" + " " +
outDate.format(allPeople.get(Integer.parseInt(args[n])).getBirthDate()));
} else if ((allPeople.get(Integer.parseInt(args[n])).getSex()).equals(Sex.FEMALE)) {
System.out.println(allPeople.get(Integer.parseInt(args[n])).getName() + " " + "ж" + " " +
outDate.format(allPeople.get(Integer.parseInt(args[n])).getBirthDate()));
}
n = n + 1;
}
break;
} catch (IndexOutOfBoundsException e) {
break;
}
}
}
}
}
Бросает исключение:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at com.javarush.task.task17.task1711.Solution.main(Solution.java:27)
По этому куску кода, выявил тестами:
case "-u":
synchronized (allPeople) {
int n = 1;
try {
while (args[n] != null) {
(allPeople.get(Integer.parseInt(args[n]))).setName(args[n + 1]);
if ((args[n + 2]).equals("м")) {
(allPeople.get(Integer.parseInt(args[n]))).setSex(Sex.MALE);
} else if ((args[n + 2]).equals("ж")) {
(allPeople.get(Integer.parseInt(args[n]))).setSex(Sex.FEMALE);
}
(allPeople.get(Integer.parseInt(args[n]))).setBirthDate(inDate.parse(args[n + 3]));
n = n + 4;
}
break;
} catch (IndexOutOfBoundsException e) {
break;
}
}
Та же история с запуском правильного решения от JavaRush, обьясните пожалуйста что тут не так?