Поиск «ресторана» с параметром не всегда работает [университетский проект] - PullRequest
0 голосов
/ 09 апреля 2020

Я занимаюсь разработкой университетского проекта, включающего сериализацию объектов (ресторанов) в файл. Проблема заключается в том, что при исследовании некоторых сериализованных объектов, если их больше 1, исследование не показывает все объекты, которые находятся в «категории» («типология») 2 и 3. Показана категория 1. 1-й блок кода находится в классе A (который реализует Serializable), 2-й - в классе «service». Идея со вторым блоком кода состоит в том, чтобы прочитать файл (если он существует), затем исключить (путем обращения к нулю) те рестораны, которые не соответствуют критерию поиска, а затем заполнить массив теми, которые соответствуют (те, которые являются теперь не NULL) и вернуть его.

Вот код, используемый для сериализации объектов:

    private void registraRistorante() {
    String filename = "data" + File.separator + "EatAdvisor.dati";
    File f = new File(filename);

    File directory = new File("data/");
    if (!directory.exists()) {
        directory.mkdir();
    }

    if (f.exists() && !f.isDirectory()) {
        try {
            FileInputStream fileInput = new FileInputStream(filename);
            ObjectInputStream in = new ObjectInputStream(fileInput);

            Ristoratori[] ristoratoriTemp = (Ristoratori[]) in.readObject();

            in.close();
            fileInput.close();

            Ristoratori[] ristoratori = new Ristoratori[ristoratoriTemp.length + 1];

            for (int i = 0; i < ristoratoriTemp.length; i++) {
                if (ristoratoriTemp[i].nome.equals(this.nome) && ristoratoriTemp[i].tipoIndirizzo.equals(this.tipoIndirizzo) &&
                        ristoratoriTemp[i].nomeIndirizzo.equals(this.nomeIndirizzo) &&
                        ristoratoriTemp[i].civico.equals(this.civico) && ristoratoriTemp[i].comune.equals(this.comune)) {
                    System.out.println("E' gia' presente un ristorante con questo nome a questo indirizzo.\n");
                    throw new Exception();
                } else {
                    ristoratori[i] = ristoratoriTemp[i];
                }
            }

            ristoratori[ristoratori.length - 1] = this;
            sortRistorantiNome(ristoratori);

            FileOutputStream fileOutput = new FileOutputStream(filename);
            ObjectOutputStream out = new ObjectOutputStream(fileOutput);

            out.writeObject(ristoratori);

            out.close();
            fileOutput.close();

            System.out.println("Dati inseriti con successo!\n");

        } catch (Exception e) {
            System.out.println("Dati non inseriti");
        }
    } else {
        try {
            Ristoratori[] ristoratori = new Ristoratori[1];
            ristoratori[0] = this;

            FileOutputStream fileOutput = new FileOutputStream(filename);
            ObjectOutputStream out = new ObjectOutputStream(fileOutput);

            out.writeObject(ristoratori);

            out.close();
            fileOutput.close();

            System.out.println("Dati inseriti con successo!\n");

        } catch (Exception e) {
            System.out.println("Dati non inseriti");
        }
    }
}

И код, используемый для исследования ресторанов:

    public static Ristoratori[] ricercaTipologia(String tipologia) {
    String filename = "data" + File.separator + "EatAdvisor.dati";
    File f = new File(filename);
    if (f.exists() && !f.isDirectory()) {
        try {
            FileInputStream fileInput = new FileInputStream(filename);
            ObjectInputStream in = new ObjectInputStream(fileInput);
            Ristoratori[] ristoratori = (Ristoratori[]) in.readObject();
            in.close();
            fileInput.close();
            int elementiNull = 0;
            for (int i = 0; i < ristoratori.length; i++) {
                if (!ristoratori[i].getTipologia().equals(tipologia)) {
                    ristoratori[i] = null;
                    elementiNull++;
                }
            }
            if (elementiNull == ristoratori.length) {
                return null;
            } else {
                Ristoratori[] ristoratoriOk = new Ristoratori[ristoratori.length - elementiNull];
                for (int i = 0; i < ristoratori.length - elementiNull; i++) {
                    if (ristoratori[i] != null) ristoratoriOk[i] = ristoratori[i];
                }
                return ristoratoriOk;
            }
        } catch (Exception e) {
            System.out.println("\nQualcosa e' andato storto e non e' stato possibile leggere i dati dei ristoranti.\n");
            return null;
        }
    } else {
        return null;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...