• 0.00

  • +0.87

task21.task2104

Задача решена!!! 
Хочу уточнить пару возникших вопросов.
1) Почему при создании нового объекта Solution вызывается метод hashCode()?
   Хотя фактически нет указаний на его вызов.
2) Мы вызываем метод contains(), а исполняется метод equals() ?



public class Solution {
    private final String first, last;

    public Solution(String first, String last) {
        this.first = first;
        this.last = last;
    }

    @Override
    public boolean equals(Object o) {
          *************
            }

    @Override
    public int hashCode() {
        ***************
    }

    public static void main(String[] args) {
        Set<Solution> s = new HashSet<>();
        s.add(new Solution("Donaldadd", "Duckfff"));
        System.out.println(s.contains(new Solution("Donald", "Duck")));
    }
}

task21.task2101 обсуждение кода

Уважаемые Java-кодеры!
Несколько дней тому назад, я вложил топик к данной задаче, в надежде получить от Вас
несколько дельных советов по ее решению.
Ваша вежливость не имеет границ, и я понял, что до этого уровня дошли единицы и то которые 
кодят по наитию. Про "сеньоров" с сайта вообще молчу.
Поэтому выкладываю код, прошедший валидацию.
Прошу дать комментарии по поводу его улучшения.
PS. Часть кода удалена, для соблюдения условий сайта. 

package com.javarush.task.task21.task2101;

/* 
Определяем адрес сети
*/
public class Solution {
    public static void main(String[] args) {
        byte[] ip = new byte[]{(byte) 192, (byte) 168, 1, 2};
        byte[] mask = new byte[]{(byte) 255, (byte) 255, (byte) 254, 0};
        byte[] netAddress = getNetAddress(ip, mask);
        print(ip);          //11000000 10101000 00000001 00000010
        print(mask);        //11111111 11111111 11111110 00000000
        print(netAddress);  //11000000 10101000 00000000 00000000

    }

    public static byte[] getNetAddress(byte[] ip, byte[] mask)
    {

        byte[] bytes =new byte[]{(byte) (ip[0]& mask[0]),(byte) (ip[1]& mask[1]),(byte) (ip[2]& mask[2]),(byte) (ip[3]& mask[3])};


        return bytes;
    }

    public static void print(byte[] bytes) {
        String stroka ="";

        for (int i = 0; i < bytes.length;i++)//  извлекаем данные из массива
        {
                String PaketString = Integer.toBinaryString((bytes[i])); // переводим  в бинарное отображение
                                                                            // 2 >>> 10
                                                                            // -64 >>> 11111111111111111111111111111000000
             int rang = 8 - PaketString.length(); // определяем разрядность массива

                if (rang > 0)// условие необходимости дополнить строку до 8 разрядов  прим 10 >>>> 00000010
                {

                    String razrmer = "0";
                    String razrmerPaket = "";


                        for (int j = 0; j < rang; j++)// цикл дополнения разряда "0"
                        {
                            razrmerPaket = razrmerPaket + razrmer;// формирование пустых разрядов
                        }

                    PaketString = razrmerPaket+PaketString;// создание пакета строки в правилином формате

                }
                    if (rang < 0)// проверка на условие лишних разрядов в строке прим 100000010 >>> 00000010
                    {
                      PaketString = PaketString.substring(PaketString.length()-8,PaketString.length()); // удаление значений лишних разрядов

                    }

                    stroka =stroka+" "+ PaketString;// правильной маски формата адресов

        }
       ***********************************// удаление лишнего пробела в 0 разряде строки
        System.out.println(********);

    }
}

task21.task2101

Помогите разобрать задачу
Задача решается с массивом int тривиально просто, однако создатели усложняют задачу приводя
значения типов int  к значениям типов byte, который в свою очередь имеет значения от -127 до +128
и в связи с этим уходят в отрицательный диапазон.
Можно конечно городить забор из приведения к типам, но валидатор точно это не оценит.
Что делать??
/* 
Определяем адрес сети
*/
public class Solution {
    public static void main(String[] args) {
        byte[] ip = new byte[]{(byte) 192, (byte) 168, 1, 2};
        byte[] mask = new byte[]{(byte) 255, (byte) 255, (byte) 254, 0};
        byte[] netAddress = getNetAddress(ip, mask);
        print(ip);          //11000000 10101000 00000001 00000010
        print(mask);        //11111111 11111111 11111110 00000000
        print(netAddress);  //11000000 10101000 00000000 00000000
    }

    public static byte[] getNetAddress(byte[] ip, byte[] mask) {
        return new byte[4];
    }

    public static void print(byte[] bytes) {
    }
}

level20 тема запись в файл и чтение из потока

Проходя тему записи в файл и чтение из потока 20 уровня, я понял, что материал в теме значительно
урезан. Поэтому, я решил написать небольшой код и посмотреть наглядно, как это все работает.
Создал объект у которого есть кот и собака и сохранил их в файл. Так как показано в лекции.
Параметры созданных объектов в файле сохранились в следующем виде: 

Барсик
3
1.2
Shavka
6

Но при чтении из файла возникает проблема с объектом Dog.
Имя и возраст при чтении этого объекта = null (NumberFormatException)
Если кто сталкивался с этой проблемой, или знает ее причину подскажите

public class Filereader {

    public static void main(String[] args) throws IOException {
        OutputStream fileOut = new FileOutputStream("d:/fileOut.txt");// создали поток записи в файл
        InputStream fileInput = new FileInputStream("d:/fileOut.txt");//создан поток чтения из файла

        Human pesen = new Human();
        pesen = new Human("Иванов",new Cat("Барсик",3,1.2),new Dog("Shavka",6));
        pesen.save(fileOut);
        fileOut.close();
        pesen.load(fileInput);

    }

    private static class Human {
        private   String name;
        private Cat cat;
        private   Dog dog;

        private Human(){}

        private Human(String name, Cat cat, Dog dog) {
            this.name = name;
            this.cat = cat;
            this.dog = dog;
        }

        public Human(String name, Cat cat) {
            this.name = name;
            this.cat = cat;
        }

        public Human(String name, Dog dog) {
            this.name = name;
            this.dog = dog;
        }

        public Human(String name) {
            this.name = name;
        }
        private void save(OutputStream output)
        {
            cat.save(output);
            dog.save(output);
        }
        private void load(InputStream input) throws IOException {

            cat.load(input);

            dog.load(input);
        }
    }

    private static class Cat {
        private String name;
        private int age;
        private double weight;

       private Cat(String name, int age, double weight) {
            this.name = name;
            this.age = age;
            this.weight = weight;
        }
        private void save(OutputStream output)
        {
            PrintWriter printWriter = new PrintWriter(output);
            printWriter.println(name);
            printWriter.println(age);
            printWriter.println(weight);
            printWriter.flush();
        }
        private void load(InputStream inputStream) throws IOException {
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            name = reader.readLine();
            age = Integer.parseInt(reader.readLine());
            weight = Double.parseDouble(reader.readLine());
        }
    }

    private static class Dog {
        private String name;
        private   int age;

        private Dog(String name,int age) {
            this.name = name;
            this.age = age;
        }
        private void save(OutputStream output)
        {
            PrintWriter printWriter = new PrintWriter(output);
            printWriter.println(name);
            printWriter.println(age);
            printWriter.flush();
        }
        private void load(InputStream inputStream) throws IOException {
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
            try {
                System.out.println(reader.readLine());// = null
               // name = reader.readLine();
                age = Integer.parseInt(reader.readLine());// = null
            }
            catch (NumberFormatException e) {

                System.out.println(name);

                System.out.println(age);
            }

        }

    }
}

task19.task1919

При решении задачи, столкнулся с проблемой, которую раньше не замечал.
По условию задачи необходимо считать из файла строки содержащие пару данных: Фамилия - число
При совпадении фамилий просуммировать числа.
Пример ввода:
Иванов 10.1
Иванов 20.2
Иванов 30.3
Петров 10.1
Петров 20.2
Петров 30.3
 Полученный результат решения меня удивил и озадачил
Иванов 50.5
Петров 60.6
Иванов 10.1

 public class Solution {
    public static void main(String[] args) throws IOException {
        HashMap<String, Double> person = new HashMap<>();
        String[] name = new String[2];

        BufferedReader fileReader = new BufferedReader(new InputStreamReader( new FileInputStream(args[0])));
        while (fileReader.ready()) {

            name = fileReader.readLine().split(" ");

                if (person.containsKey(name[0]))
                 {
                   person.put( name[0], person.get(name[0])+ Double.parseDouble(name[1]));
                 }
                 else
                {
                 person.put(name[0],Double.parseDouble(name[1]));
                }
        }
        for (Map.Entry hemen : person.entrySet() )
        {
            System.out.println(hemen.getKey()+ " "+ hemen.getValue());
        }
    }
}

// как видно из примера самый первый входной элемент по ключу получает двойника.
// Если учесть, что в поле КEY не может быть одинаковых обьектов, то могу предположить,
что два одинаковых имени имеют разные типы, другого объяснения я не вижу.
 Помогите понять суть происходящего и пути решения проблемы.

task19.task1924 не проходит условие вывода результата в консоль

Замена чисел
1. В статическом блоке инициализировать словарь map парами [число-слово] от 0 до 12 включительно.
Например, 0 — «ноль«, 1 — «один«, 2 — «два»
2. Считать с консоли имя файла, считать содержимое файла.
3. Заменить все числа на слова используя словарь map.
4. Результат вывести на экран.
5. Закрыть потоки

    > { статический блок map. }
    > 
    >  public static void main(String[]
    > args) throws IOException {
    >         BufferedReader reader = new BufferedReader(new
    > InputStreamReader(System.in));
    >         Reader fileReader = new BufferedReader(new
    > FileReader(reader.readLine()));
    >         reader.close();
    >         String str = "" ;
    >         int cheslo = fileReader.read();
    >         while ( cheslo != -1)
    >         {
    >             char carter = (char)cheslo;
    >             str = str + carter;
    >             cheslo = fileReader.read();
    >         }
    >            String[] stringsArrey = str.split(" ");
    >         str = "";
    >             for (String indexString: stringsArrey )
    >             {
    >                     try
    >                     {
    >                         int allInt = Integer.parseInt(indexString);
    >                         for (Map.Entry spisok : map.entrySet())
    >                         {
    >                             if (allInt ==(int) spisok.getKey())
    >                             {
    >                                 indexString = spisok.getValue().toString();
    >                                 str = str+" " + indexString;
    >                             }
    >                         }
    >                     }
    >                  catch (NumberFormatException e) {
    >                     str = str + " " + indexString;
    >                 }
    >             }
    >             fileReader.close();
    >             str = str.substring(1);
    >             System.out.println(str);
    >     } }
    > 
    > Результат вывода: ��� ����� один ����,
    > � ��� ��� - двенадцать . ����������
    > ����� ��� file1. 110 - ��� �����
    > 
    > Могу считывание произвести в
    > кириллице, но тогда не проходит
    > условие по использованию класса
    > FileReader


обсуждение задачи task1820

Прошу дать комментарии по данному "Дермокоду" на предмет его улучшения и исправления ошибки при записи 
 в файл. Уверен, что есть другие, лучшие варианты решения задачи, но мне они пока не известны.
Заранее благодарен всем участникам форума.
  Условие задачи:
Считать с консоли 2 имени файла.
Первый файл содержит вещественные(дробные) числа, разделенные пробелом. Например, 3.1415.
Округлить числа до целых и записать через пробел во второй файл.
Закрыть потоки.
public class Solution {
    public static void main(String[] args) throws IOException {
      BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        String  fileNameRead = reader.readLine(); // вводим имя файла из которого читаем

        String fileNameWrite = reader.readLine(); // вводим имя файла куда записываем

        FileInputStream fileFirstRead = new FileInputStream( fileNameRead ); // открыли поток чтения
        FileOutputStream fileSecondWrite = new FileOutputStream(fileNameWrite );// открыли поток записи

        List save = new ArrayList(); // список который будет хранить округленные значения чисел
        String stringDouble = ""; // переменная преобразующая считаныы сим вол в число
        double doub;
        while (fileFirstRead.available() > 0)  // цикл считывания из файла
        {
            int readByte = fileFirstRead.read(); // считывание одного байта из файла
            if (readByte != 32 ){ // условие чтения байтов до пробела
              stringDouble = stringDouble+(char) readByte; // получение набора символов
            }
            else {

               doub = Double.parseDouble(stringDouble); // Если в условии считали пробел,
                                  // то преобразовали в набор символов в числовой тип
               int d =(int) Math.round(doub); // округление полученного числа
               save.add(d); // занесение чила в список
               save.add(" "); // разделение чисел пробелом
               stringDouble = " ";
            }
        }
        doub = Double.parseDouble(stringDouble); // преобразование набора символов в число
                                                 // на последне шаге цикла
        int d =(int) Math.round(doub); // округление последнего числа
        save.add(d); // занесение в список
        stringDouble = save.toString(); // преобразование каждого элемента списка в набор символов
        // при преобразовании почемуто из списка который содержит
        // объекты i[0]=3 i[1]=4 i[2]=4 i[3]=-3 i[4]=-3 i[5]=-4
        // получили набор строковых символов вида [3, ,4, ,4, ,-3, ,-3, ,-4]- почему??????

       char[] s = stringDouble.toCharArray(); // преобразование всех наборов символов в
                                              // массив символов

       for (int i = 0 ; i < s.length ; i++) // цикл извлечения элемента массива
       {
          if ( '[' != s[i] && ',' !=s[i] && ']'!= s[i]  ) // массив символов при приведении из типа
                                                         // String почемуто имеет лишние [ ]  и ,
              // это условие говорит о том, что их не читаем
          {
           byte sd = (byte)s[i] ; // преобразование считанного значения из типа cher  в тип byte
           fileSecondWrite.write(sd);} // запись байта в файл
           // при просмотре записанного файла обнаружил, что числа разделены между собай двумя 
           //пробелами, по этому эта часть валидации не проходит.

       }
       fileFirstRead.close(); // закрытие потоков
       fileSecondWrite.close();
    }
}

Обсужление задачи task1820

Прошу дать комментарии к данному "ДермоКоду" на предмет улучшения кода и исправления ошибки при записи
 в файл. Знаю, что есть другие способы решения данной задачи, но мне они пока неизвестны.
Заранее благодарен всем участникам форума.
Условие задачи.
Считать с консоли 2 имени файла.
Первый файл содержит вещественные(дробные) числа, разделенные пробелом. Например, 3.1415.
Округлить числа до целых и записать через пробел во второй файл.
Закрыть потоки.

/* 
Округление чисел
*/

import java.io.*;
import java.util.*;

public class Solution {
    public static void main(String[] args) throws IOException {
      BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        String  fileNameRead = reader.readLine(); // вводим имя файла из которого читаем

        String fileNameWrite = reader.readLine(); // вводим имя файла куда записываем

        FileInputStream fileFirstRead = new FileInputStream( fileNameRead ); // открыли поток чтения
        FileOutputStream fileSecondWrite = new FileOutputStream(fileNameWrite );// открыли поток записи

        List save = new ArrayList(); // список который будет хранить округленные значения чисел
        String stringDouble = ""; // переменная преобразующая считаныы сим вол в число
        double doub;
        while (fileFirstRead.available() > 0)  // цикл считывания из файла
        {
            int readByte = fileFirstRead.read(); // считывание одного байта из файла
            if (readByte != 32 ){ // условие чтения байтов до пробела
              stringDouble = stringDouble+(char) readByte; // получение набора символов
            }
            else {

               doub = Double.parseDouble(stringDouble); // Если в условии считали пробел,
  //то преобразовали набор символов в числовой тип

               int d =(int) Math.round(doub); // округление полученного числа
               save.add(d); // занесение чила в список
               save.add(" "); // разделение чисел пробелом
               stringDouble = " ";
            }
        }
        doub = Double.parseDouble(stringDouble); // преобразование набора символов в число
                                                 // на последне шаге цикла
        int d =(int) Math.round(doub); // округление последнего числа
        save.add(d); // занесение в список
        stringDouble = save.toString(); // преобразование каждого элемента списка в набор символов
        // при преобразовании почему-то из списка который содержит 
         //объекты i[0]=3 i[1]=4 i[2]=4 i[3]=-3 i[4]=-3 i[5]=-4
        // получили набор строковых символов вида [3, ,4, ,4, ,-3, ,-3, ,-4]- почему??????

       char[] s = stringDouble.toCharArray(); // преобразование всех наборов символов в
                                              // массив символов

       for (int i = 0 ; i < s.length ; i++) // цикл извлечения элемента массива
       {
          if ( '[' != s[i] && ',' !=s[i] && ']'!= s[i]  ) // массив символов при приведении из типа
                                                         // String почемуто имеет лишние [ ]  и ,
              // это условие говорит о том, что их не читаем
          {
           byte sd = (byte)s[i] ; // преобразование считанного значения из типа cher  в тип byte
           fileSecondWrite.write(sd);} // запись байта в файл
           // при просмотре записанного файла обнаружил, что числа разделены между собой
           // двумя пробелами
           // по этому эта часть валидации не проходит.

       }
       fileFirstRead.close(); // закрытие потоков
       fileSecondWrite.close();
    }
}

task18.task1820

При решении задачи, столкнулся с проблемой преобразования типов.
                      Условие
          Считать с консоли 2 имени файла.
          Первый файл содержит вещественные(дробные) числа, разделенные пробелом.
          Округлить числа до целых и записать через пробел во второй файл.
   Идея решения:
     Считывать с файла значения байтов и преобразовывать их в строку пока не дойдем до
     пробела или конца  файла.
   Далее строку преобразовать в тип double, округлить ее и поместить в список.
   Затем из списка записать в файл.
   Проблема: Когда из файла я читаю число к примеру -11.2, то в соответствии байт кодом
             идет считывание чисел - == 45; 1 == 49; 1 == 49; . == 46; 2 == 50.
           Теперь, когда я начинаю добавлять эти значения к "" типа String, то
           ожидаю получить строку равную значению 4549494650, а получаю значение 4946325049.
           Если кто знает подскажите или дайте ссылку, где почитать.
     Проблема сводится не к решению данной задачи, а к выяснению причина такого неправильного
    преобразования к типу.
    СПС что дочитали до конца. The End.  

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
       // String  fileNameRead = reader.readLine();
       // String fileNameWrite = reader.readLine();
        FileInputStream fileFirstRead = new FileInputStream( "d:/hosts0.txt"/*fileNameRead*/);
        FileOutputStream fileSecondWrite = new FileOutputStream( "d:/hosts.txt"/*fileNameWrite*/);
        List spil = new ArrayList<>();
        List save = new ArrayList();
        String stringDouble = "";
        double doub;
        while (fileFirstRead.available() > 0)
        {
            int readByte = fileFirstRead.read();
            if (readByte != 32 && readByte != -1){
              stringDouble = stringDouble+fileFirstRead.read();
            }
            else {
               stringDouble =  spil.toString();/*??????*/
               // дальше не смотреть не отлажена
               doub = Double.parseDouble(stringDouble);
               doub = Math.rint(doub);
               save.add(doub);
               save.add(' ');
               spil.removeAll(spil);
            }
        }
        stringDouble = save.toString();
       char[] s = stringDouble.toCharArray();
       for (int i = 0 ; i < s.length ; i++)
       {
           byte sd = (byte)s[i] ;
           fileSecondWrite.write(sd);
       }
    }
}

task1808

package com.javarush.task.task18.task1808;

   Не проходит строка file3.write(.....);

Разделение файла
Считать с консоли три имени файла: файл1, файл2, файл3.
Разделить файл1 по следующему критерию:
Первую половину байт записать в файл2, вторую половину байт записать в файл3.
Если в файл1 количество байт нечетное, то файл2 должен содержать большую часть.
Закрыть потоки.

/* 
Разделение файла
*/
 На ввод конкретных имен файлов прощу внимание не обращать
import java.io.*;

public class Solution {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String fileName1 = "c:/hosts.txt"; //reader.readLine();
        FileInputStream file1 = new FileInputStream(fileName1);
         String fileName2 = "d:/hosts2.txt"; //reader.readLine();
        FileOutputStream file2 = new FileOutputStream(fileName2);
        String fileName3 = "d:/hosts3.txt"; //reader.readLine();
        FileOutputStream file3 = new FileOutputStream(fileName3);
        reader.close();
        byte[] bytesFile = new byte[file1.available()]; // определил размер массива для хранения        байтов файла
        if (file1.available() > 0) {file1.read(bytesFile);} // заполнил массив
        file1.close(); // закрыл потов чтения
        float floatSize = (float) bytesFile.length; // определили величину массива
        int size1or2 = (int) (floatSize/2);  // находим величину 1/2 массива
        file2.write(bytesFile,0,size1or2); // производим запись из массива 0 до 1/2 (работает)

        file3.write(bytesFile,size1or2+1,bytesFile.length );// производим запись из массива от 1/2+1 до end ( не работает
                                                       // IndexOutOfBoundsException. Если вместо size1or2+1 подставить 0
                                                       // то качнется весь файл.
        file2.close();
        file3.close();
    }


}

task1711

семь пунктов решил за пару часов. над последним сижу сутки. в чем здесь проблема?
подскажите кто знает



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": calculete(args);
                    break;
            case "-u": upDate(args);
                break;
            case "-d":
                delete(args);
                break;
            case "-i":
                printID(args);
                break;
            default:

        }

    }


        //start here - начни тут


    public static  void calculete(String[] args) throws ParseException {
        Date  dateFormat;// создали формат представления даты
        int z = (int) ((args.length)/3.0);// определяем  какое количество объектов класса Person необходимо создать
        for (int i= 1; i < z+1 ; i++) // создаем цикл создания объектов Person
        {
            /* преобразуем каждый третий аргумент в формат даты*/
            dateFormat = new SimpleDateFormat("dd/MM/yyy",Locale.ENGLISH).parse(args[i*3]);

            /* определяем принадлежность пола и заносим в список List*/
            switch (args[i*3-1])
            {
                case "ж" :synchronized (allPeople){allPeople.add(Person.createFemale(args[i*3-2],dateFormat));break;}
                case "м" : synchronized (allPeople){allPeople.add(Person.createMale(args[i*3-2],dateFormat)); break;} default:
            }
            System.out.println(allPeople.size()-1);

        }

    }
    public static  void upDate(String[] args) throws ParseException {
        Date dateFormat;
        int i = 1;
        Person person;
        try {
            /* JVM на последнем шаге цикла тихо ругнулась, сказав, что аргумунта с указанным индексом  не существует.
        Я, ей посочувствовал и дабы не переписывать условие, обвернул в try catch. Так надо - подумал я. Ладно - подумала машина*/


            while (!args[i * 4 - 3].equals(null)) {
                dateFormat = new SimpleDateFormat("dd/MM/yyyy").parse(args[i * 4]);

                // привели каждый первый аргумент посылки к типу int и извлекли содержимое по этому индексу из списка List
                synchronized (allPeople){
                person = allPeople.get(Integer.parseInt(args[i * 4 - 3]));}
                person.setName(args[i * 4 - 2]);
                person.setBirthDay(dateFormat);
                person.setSex(args[i * 4 - 1].equals("м") ? Sex.MALE : Sex.FEMALE);
                i++;
            }
        }
        catch (ArrayIndexOutOfBoundsException e){
            return;
        }

    }
    public static  void delete(String[] args){
        Person person;
        int index;
        for (int i = 1; i < args.length ; i++)
        {
          index = Integer.parseInt(args[i]);// перевели значение аргумента из типа String в тип int
            synchronized (allPeople){
          person = allPeople.get(index);
            } // Достали из списка объект с указанным индексом
            /* Проводим смену значений параметров для данного объекта*/
          person.setName(null);
          person.setSex(null);
          person.setBirthDay(null);
        }

    }


    private static  void printID(String[] args) {
        Person person;
        int index;
        String dateFormat;
        String s;
        for (int i = 1; i < args.length ; i++) {
            index = Integer.parseInt(args[i]);// перевели значение аргумента из типа String в тип int
            synchronized (allPeople) {
                person = allPeople.get(index);
            }// Достали из списка объект с указанным индексом
            dateFormat = new SimpleDateFormat("dd-MMM-yyyy").format(person.getBirthDay());
            s=(person.getSex().equals(Sex.MALE)? "м" : "ж");
            System.out.println(person.getName()+" "+ s +" "+dateFormat);

        }
    }



}