всё работает чётко. Валидатор говорит что дата в -d -i работает неправильно, но оно работает правильно. Я скопировал эту часть кода из прошлой точно такой же задачи, которую валидатор пропустил .
Помогите понять что чем дело.
Валидатор пишет : Убедись, что удаляется дата рождения человека с заданным id, т.е дата рождения равно null.
Реально оно равно null .
Валидатор пишет : Убедись, что выводится на экран дата рождения человека (формат 15-Apr-1990).
Реально оно выводит именно в таком формате и в прошлый раз всё было принято валидатором.
package com.javarush.task.task17.task1711;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;
/*
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
Requirements:
1. Класс Solution должен содержать public static volatile поле allPeople типа List<Person>.
2. Класс Solution должен содержать статический блок, в котором добавляются два человека в список allPeople.
3. При параметре -с программа должна добавлять всех людей с заданными параметрами в конец списка allPeople,
и выводить id каждого (index) на экран.
4. При параметре -u программа должна обновлять данные людей с заданными id в списке allPeople.
5. При параметре -d программа должна логически удалять людей с заданными id в списке allPeople.
6. При параметре -i программа должна выводить на экран данные о всех людях с заданными id по формату указанному в задании.
7. Метод main класса Solution должен содержать оператор switch по значению args[0].
8. Каждый case оператора switch должен иметь блок синхронизации по allPeople.
*/
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) {
//код
// -с - добавляет всех людей с заданными параметрами в конец allPeople,
// выводит id (index) на экран в соответствующем порядке
// -c name1 sex1 bd1 name2 sex2 bd2 ...
// -c Миронов м 15/04/1990 Миронова ж 22/05/1987
switch (args[0]) {
case "-c": // if (args[0].equals("-c"))
synchronized (allPeople) {
int i =0;
while (true) { // цикл
try { // пытаемся делать всё что ниже
String name = args[1 + i * 3];
String sex = args[2 + i * 3];
int YY = Integer.parseInt(args[3 + i * 3].substring(6, 10)) - 1900;
int MM = Integer.parseInt(args[3 + i * 3].substring(3, 5)) - 1;
int dd = Integer.parseInt(args[3 + i * 3].substring(0, 2));
Date birthday = new Date(YY, MM, dd);
// System.out.println(YY+ " "+ MM + " "+ dd);
// System.out.println(birthday1.getMonth());
if (args[2 + i * 3].equals("м")) {
allPeople.add(Person.createMale(args[1 + i * 3], birthday));
System.out.println(allPeople.size() - 1);
} else if (args[2 + i * 3].equals("ж")) {
allPeople.add(Person.createFemale(args[1 + i * 3], birthday));
System.out.println(allPeople.size() - 1);
}
i++;
} catch (Exception e) {// если эррай лист пуст, то брэйк цикла
break;// если эррай лист пуст, то брэйк цикла
} // если эррай лист пуст, то брэйк цикла
} // синхронизация
} // цикл
break;
// -u - обновляет соответствующие данные людей с заданными id
case "-u":
synchronized (allPeople) {
// -u 0 namePetr м 15/04/1990 1 namePetra ж 15/04/1987
int i = 0;
while (true) { // цикл
try { // пытаемся пока лист не будет пуст
int id = Integer.parseInt(args[1 + i * 4]);
String name = args[2 + i * 4];
String sex = args[3 + i * 4];
int YY = Integer.parseInt(args[4 + i * 4].substring(6, 10)) - 1900;
int MM = Integer.parseInt(args[4 + i * 4].substring(3, 5)) - 1;
int dd = Integer.parseInt(args[4 + i * 4].substring(0, 2));
Date birthday = new Date(YY, MM, dd);
// System.out.println(YY+ " "+ MM + " "+ dd);
// System.out.println(birthday1.getMonth());
if (sex.equals("м")) {
// set(int index, тип value)
allPeople.set((id), Person.createMale(name, birthday));
// System.out.println(allPeople.get(id ).getName()+" "+allPeople.get(id ).getBirthDate()+" "+allPeople.get(id ).getSex()); // проверка
} else if (sex.equals("ж")) {
allPeople.set((id), Person.createFemale(name, birthday));
// System.out.println(allPeople.get(id ).getName()+" "+allPeople.get(id ).getBirthDate()+" "+allPeople.get(id ).getSex()); // проверка
}
i++;
} catch (Exception e) {// если эррай лист пуст, то брэйк цикла
break;// если эррай лист пуст, то брэйк цикла
} // если эррай лист пуст, то брэйк цикла
} // цикл
}// синхронизация
break;
// -d id1 id2 id3 id4 ...
// -d - производит логическое удаление человека с id, заменяет все его данные на null
case "-d":
synchronized (allPeople) {
int i=0;
while (true) {
try { // пытаемся пока лист не будет пуст
int id = Integer.parseInt(args[1]+i);
Person person = allPeople.get(id);
person.setSex(null);
person.setBirthDate(null);
person.setName(null);
i++ ;
} catch (Exception e) {// если эррай лист пуст, то брэйк цикла
break;// если эррай лист пуст, то брэйк цикла
} // если эррай лист пуст, то брэйк цикла
}
}
break;
// -i - выводит на экран информацию о всех людях с заданными id: name sex bd
// -i id1 id2 id3 id4 ...
// -r - выводит на экран информацию о человеке с id: name sex (м/ж) bd (формат 15-Apr-1990)
case "-i":
synchronized (allPeople) {
int i = 0;
while (true) {
try {
int id = Integer.parseInt(args[1] + i);
String name = allPeople.get(id).getName();
Sex sex = allPeople.get(id).getSex();
String printSex = "0";
if (sex == Sex.MALE) {
printSex = "м";
} else if (sex == Sex.FEMALE) {
printSex = "ж";
}
Date date = allPeople.get(id).getBirthDate();
/*
String bd = date.toString();
int dd = Integer.parseInt ( bd.substring(8, 10) );
int MM = date.getMonth()+1;
int yyyy = 1900+date.getYear();
*/
// DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy", Locale.ENGLISH);
/*
Date current = new Date(105, 5, 4, 12, 15, 0);
SimpleDateFormat formatter = new SimpleDateFormat("MMM-dd-YYYY");
String message = formatter.format(current);
*/
SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM-yyyy", Locale.ENGLISH);
String message = formatter.format(date);
System.out.println(name + " " + printSex + " " + message); // +"////"+dd
i++;
} catch (Exception e) {// если эррай лист пуст, то брэйк цикла
break;// если эррай лист пуст, то брэйк цикла
} // если эррай лист пуст, то брэйк цикла
}
}
break;
} // свич
} // майн
} // солюшн