将书的多个值添加到java中的ArrayList

时间:2013-12-18 20:33:15

标签: java methods arraylist

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

我想要做的是将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);
    }
}

这是对的吗?请有人帮我吗

5 个答案:

答案 0 :(得分:2)

public static ArrayList<Book> Books = new ArrayList<>();不能在Book类中。相反,你应该制作某种容器类,例如public class BookShelf,它将聚集这一系列书籍中的书籍。

另一个坏处是你在POJO类中创建应用程序逻辑。像Book b1 = new Book...这样的语句应该在运行时类中的方法中,而不是在POJO中。 POJO应该只包含带有getter / setter的私有成员,最后是toString方法。

另外,避免创建公共成员。他们应该是私人的吸气者和制定者。

答案 1 :(得分:2)

您必须安排代码:

// 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();

答案 2 :(得分:2)

书籍清单应与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
}

答案 3 :(得分:1)

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

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

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

删除b1b2,然后在驱动程序的类外创建它们。

答案 4 :(得分:0)

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



这样做,你有:
书籍书=新书();
书book1 =新书();
书book2 =新书();
books.add(BOOK1);
books.add(第二册);