ArrayList不会存储用户输入的实例

时间:2019-05-08 08:42:02

标签: java arraylist java.util.scanner

我正在尝试使用用户输入将元素添加到ArrayList中。问题是当我尝试添加一些东西并要求将其列出时,它没有显示在列表中。

我认为这是read方法的问题,但是我不确定它是否有问题。另一件事是事实,添加元素的方法不在循环中,我尝试使用循环,但仍然无法正常工作。 有一个带有构造器的电影类,该构造器具有titleyeargenreprice的参数和toString方法。

预期结果:添加电影后,它应列出添加的电影。 实际结果:add方法要求输入,但是当我使用list方法时,它不会列出我添加的内容。

这里是完整的KioskCatalogue类,用于更多上下文。

3 个答案:

答案 0 :(得分:7)

new Catalogue().addMovie();

每次要添加Catalogue时,您都在创建一个新的Movie,而您从不引用它。

相反,请将所有电影添加到同一Catalogue

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

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

答案 1 :(得分:0)

那是因为'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();
       }
}

答案 2 :(得分:0)

在信息亭中,您必须保留目录的一个实例。 我不知道您打算在哪里创建Catalog实例,所以添加了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();
    }
}