【问题标题】:Add multiple values of a book to an ArrayList in java将一本书的多个值添加到java中的ArrayList
【发布时间】:2014-01-07 04:53:02
【问题描述】:

我对如何将多个值添加到数组列表中有些困惑。

我想要做的是将 1 个对象的多个值添加到数组列表中。

例如:

我有一个名为 books 的数组列表,我正在尝试添加一本书及其标题、作者、出版年份等...

这是我尝试过的地方,但我不确定它是否正确或是否有更简单的方法。

public class Book {

    public static ArrayList<Book> Books = new ArrayList<>();

    public int isbn;
    public int yearPublished;
    public String title;
    public String author;
    public String price;
    public int noOfCopies;

  Book b1 = new Book(1234, 1991, "Book1", "mark.mark", "£11.00", 5);
  Book b2 = new Book(4321, 1994, "Book2", "bob.bob", "£12.00", 3);



    public Book(int ISBN, int year, String ttle, String auth, String pri, int copies) {

        this.isbn = ISBN;
        this.yearPublished = year;
        this.title = ttle;
        this.author = auth;
        this.price = pri;
        this.noOfCopies = copies;

        Books.add(this);
    }
}

这是对的吗?谁能帮帮我

【问题讨论】:

  • 您是否收到 StackOverflowError 错误?
  • 您应该尊重命名约定。对于Books.add(this);,我们的印象是addBooks类的静态方法。
  • 删除 b1b2 的定义

标签: java methods arraylist


【解决方案1】:

您现在看到的任何错误的原因都是实例变量

Book b1 = new Book(1234, 1991, "Book1", "mark.mark", "£11.00", 5);

对于您创建的每个Book 实例,它将创建一个Book 实例,该实例将创建一个Book 实例,该实例将创建一个Book 实例,令人作呕,最终导致StackOverflowError

删除那些b1b2 并在驱动程序的类之外创建它们。

【讨论】:

    【解决方案2】:

    我建议不要在 book 类中创建 books 对象(书不包含书。它没有意义)。我建议将书籍移到自己的班级。



    这样做,你有:
    书籍书籍 = new Books();
    Book book1 = new Book();
    Book book2 = new Book();
    book.add(book1);
    book.add(book2);

    【讨论】:

      【解决方案3】:

      public static ArrayList&lt;Book&gt; Books = new ArrayList&lt;&gt;(); 不能属于 Book 类。相反,您应该创建某种容器类,例如 public class BookShelf,它将在此 Books 数组中聚合书籍。

      另一件坏事是您在 POJO 类中创建应用程序逻辑。 Book b1 = new Book... 之类的语句应该在运行时类的方法中,而不是在 POJO 中。并且 POJO 应该只包含带有 getter/setter 的私有成员,并最终包含 toString 方法。

      另外,避免创建公共成员。对于 getter 和 setter,它们应该是私有的。

      【讨论】:

        【解决方案4】:

        你必须安排你的代码:

        // Class Definition
        public class Book {
            // Member Variables
            public int isbn;
            public int yearPublished;
            public String title;
            public String author;
            public String price;
            public int noOfCopies;
        
            // Constructor
            public Book(int ISBN, int year, String ttle, String auth, String pri, int copies) {
        
                this.isbn = ISBN;
                this.yearPublished = year;
                this.title = ttle;
                this.author = auth;
                this.price = pri;
                this.noOfCopies = copies;
            }
        
            // Create a List of Books
            public static List<Book> getBooks() {
                Book b1 = new Book(1234, 1991, "Book1", "mark.mark", "£11.00", 5);
                Book b2 = new Book(4321, 1994, "Book2", "bob.bob", "£12.00", 3);
                List<Book> books = new ArrayList<Book>();
                books.add(b1);
                books.add(b2);
                return books;
            }
        }
        

        然后,您可以通过调用 getBooks() 函数来获取示例书籍:

        List<Book> exampleBooks = Book.getBooks();
        

        【讨论】:

        • 谢谢,这帮助很大! :)
        【解决方案5】:

        图书列表应在与Book 不同的类中进行管理。例如,您可能有

        public class Library
        {
            private ArrayList<Book> books = new ArrayList<Book>();
        
            public Library()
            {
                Book b1 = new Book(...);
                Book b2 = new Book(...);
        
                books.add(b1);
                books.add(b2);
            }
        }
        
        public class Book
        {
            private int isbn;
            private int yearPublished;
            private String title;
            private String author;
            private String price;
            private int noOfCopies;
        
            public Book(int ISBN, int year, String ttle, String auth, String pri, int copies)
            {
                this.isbn = ISBN;
                this.yearPublished = year;
                this.title = ttle;
                this.author = auth;
                this.price = pri;
                this.noOfCopies = copies;
            }
        
            // getter and setter for each field
        }
        

        【讨论】:

        • 感谢您的帮助!这和上面的答案有帮助:)
        猜你喜欢
        • 2013-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-03
        相关资源
        最近更新 更多