2013-12-18 27 views
0

我對如何將多個值添加到數組列表中存在一些困惑。將一本書的多個值添加到java中的一個ArrayList中

我試圖做的是將1個對象的多個值添加到數組列表中。

例如:

我有一個數組列表叫做書和IM試圖與它的標題,作者加了一本書,每年出版等等...

這裏就是我有給它一個嘗試,但我不知道如果它的權利或如果有一個更簡單的方法。

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

你是否得到一個StackOverflowError? –

+5

你應該尊重命名約定。用'Books.add(this);',我們有這樣的印象:add是'Books'類的靜態方法。 – user2336315

+0

刪除** b1 **和** b2 **的定義 –

回答

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(); 
+0

謝謝,這很有幫助! :) –

1

你看到現在的問題是該實例變量

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

對於創建的每個Book實例任何錯誤的原因,它會創建一個Book實例,這將創造一個Book例如,這將創建一個Book實例,令人生厭,最終導致StackOverflowError

刪除那些b1b2並在驅動程序的類外創建它們。

0

我建議不要在書類中創建書籍對象(一本書不包含書籍,它沒有意義)。我建議將書籍搬到自己的班級。



這樣做,你必須:
書籍書籍=新書();
Book book1 = new Book();
Book book2 = new Book();
books.add(book1);
books.add(book2);

2

public static ArrayList<Book> Books = new ArrayList<>();不能在Book類中。相反,你應該製作某種容器類,例如public class BookShelf,這將會聚集這類書籍中的書籍。

另一個壞事是你在POJO類中做應用程序邏輯。像Book b1 = new Book...這樣的語句應該在你的運行時類中,而不是在POJO中。而且POJO應該只包含私有成員和getter/setter,最後還要包含String方法。

此外,請避免創建公共成員。他們應該是私人的getter和setter。

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 
} 
+0

謝謝你的幫助!這和上面的答案有助於:) –

相關問題