我对如何在数组列表中添加多个值感到有些困惑。
我想要做的是将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);
}
}
这是对的吗?请有人帮我吗
答案 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
。
删除b1
和b2
,然后在驱动程序的类外创建它们。
答案 4 :(得分:0)
我建议不要在书类中创建一个书籍对象(一本书不包含书籍。它没有任何意义)。我建议将书籍移到自己的班级。
这样做,你有:
书籍书=新书();
书book1 =新书();
书book2 =新书();
books.add(BOOK1);
books.add(第二册);