ArrayList не будет хранить экземпляр из пользовательского ввода - PullRequest
1 голос
/ 08 мая 2019

Я пытаюсь добавить элемент в ArrayList с помощью пользовательского ввода. Проблема в том, что когда я пытаюсь что-то добавить и просить внести это в список, это не отображается в списке.

Я думал, что это проблема с методом чтения, но я не уверен, что с ним что-то не так. Другой причиной было то, что метод добавления элемента не был в цикле, я пытался использовать цикл, но он все еще не работал. Существует класс фильма с конструктором, который имеет параметры title, year, genre, price и метод toString.

Ожидаемый результат: после добавления фильма в списке должен быть добавлен фильм. Фактический результат: метод add запрашивает ввод, но когда я использую метод list, он не выводит список того, что я добавил.

Вот полный Киоск и Каталог класса для большего контекста.

Ответы [ 3 ]

7 голосов
/ 08 мая 2019
new Catalogue().addMovie();

Вы создаете новый Catalogue каждый раз, когда хотите добавить Movie, и никогда не ссылаетесь на него.

Вместо этого добавьте все свои фильмы в один и тот же Catalogue:

private void addMovie(Catalogue c) {
    c.addMovie();
}

private void listMovie(Catalogue c) {
    c.listMovie();
}
0 голосов
/ 08 мая 2019

В киоске вы должны хранить экземпляр своего каталога.Я не знаю, где вы планируете создать экземпляр каталога, поэтому добавил 2 конструктора:

public class Kiosk {
    private Catalogue cat;

    public Kiosk() {
       this(new Catalogue());
    }
    public Kiosk(Catalogue catalogue) {
        this.cat=catalogue;
    }
    private void addMovie() {
        cat.addMovie();
    }

    private void listMovie() {
        cat.listMovie();
    }
}
0 голосов
/ 08 мая 2019

это из-за ключевого слова 'new'.Вы должны использовать синглтон объект 'Каталог' здесь.

class Kiosk {
       private static Catalogue catalogue;

       public Catalogue getCatalogue() {
          if(Objects.isNull(catalogue)){
               catalogue = new Catalogue();
          }
          return catalogue; //will return singleton catalogue object
       }

       private void addMovie() {
          getCatalogue().addMovie();
       }

       private void listMovie() {
          getCatalogue().listMovie();
       }
}
...