@Surprizzze95

КАК отсортировать содержимое тел книги используя интерфейс Comparable?

package com.m46academy.telbook;

import com.m46academy.telbook.database.Database;
import com.m46academy.telbook.database.implementation.SimpleFileDatabase;
import com.m46academy.telbook.exception.*;
import com.m46academy.telbook.model.Person;
import com.m46academy.telbook.model.Searchable;
import com.m46academy.telbook.model.personalinfo.PersonalInfo;

import java.io.IOException;

public class TelBook{

    private String owner;

    private Person[] persons = new Person[10];
    private int largestIndex = 0;

    private Database database = new SimpleFileDatabase();

//    public Person[] getPersons() {
//        return persons;
//    }

    public int length() {
        return largestIndex;
    }

    public void add(Person person) throws IOException, EmptyPersonException, TelBookFullException {

        if (largestIndex < 10 && largestIndex >= 0) {

            persons[largestIndex] = person;
            database.createPerson(person, largestIndex);

            largestIndex++;

        } else if (person == null || (person.getPersonalInfos() == null && person.getContacts() == null)) {
            throw new EmptyPersonException();
        } else if (largestIndex >= 10) {
            throw new TelBookFullException();
        }

    }

    //STEP 12 - START
    public void replacePerson(int index, Person person) throws ArrayIndexOutOfBoundsException, EmptyPersonException, PersonNotFoundException, CannotSavePersonException {

        if (index <= 0 || index >= 10) {
            ArrayIndexOutOfBoundsException exception = new ArrayIndexOutOfBoundsException();
            throw exception;
        } else if (person == null || (person.getContacts() == null && person.getPersonalInfos() == null)) {
            EmptyPersonException exception = new EmptyPersonException();
            throw exception;
        }

        Person oldPerson = persons[index];
        persons[index] = person;

        try {
            database.updatePerson(person, index);
        } catch (PersonNotFoundException e) {
            throw e;
        } catch (IOException e) {
            persons[index] = oldPerson;
            throw new CannotSavePersonException();
        }

    }
    //STEP 12 - END

    public String getOwner() {
        return owner;
    }

    public void setOwner(String owner) {
        this.owner = owner;
    }

    public void loadData() throws IOException, InputValidationException {

        Person[] personsFromReadAll = database.readAll();

        largestIndex = personsFromReadAll.length;

        this.persons = new Person[10];

        for (int i = 0; i < largestIndex; i++) {
            this.persons[i] = personsFromReadAll[i];
        }

    }

    public Person getPerson(int index) throws ArrayIndexOutOfBoundsException {

        if (index < 0 || index > largestIndex - 1) {
            throw new ArrayIndexOutOfBoundsException();
        }

        return persons[index];
    }

    //STEP 12 - START
    public void delete(int index) throws ArrayIndexOutOfBoundsException, PersonNotFoundException, CannotDeletePersonException {

        database.deletePerson(index);

        persons[index] = null;

    }
    //STEP 12 - END

    //STEP 13 - START
    public Person[] search(String keyword) {

        Person[] tmpFoundPersons = new Person[persons.length];
        int lastFoundPersonsIndex = 0;

        for (int i=0; i<persons.length; i++) {
            if (persons[i]!=null) {
                Searchable searchable = persons[i];
                if (searchable.search(keyword)) {
                    tmpFoundPersons[lastFoundPersonsIndex] = persons[i];
                    lastFoundPersonsIndex++;
                }
            }
        }

        Person[] foundPersons = new Person[lastFoundPersonsIndex];

        for (int i=0; i<foundPersons.length; i++) {
            foundPersons[i] = tmpFoundPersons[i];
        }

        return foundPersons;
    }

    //STEP 13 - END


}
  • Вопрос задан
  • 69 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽