2015-11-15 21 views
1

我正在嘗試學習Java,並且非常努力地理解類。我有一個String類型的數組,我需要將它放入一個對象的數組列表中,然後使用來自另一個類的方法中的數組列表的getList和setters。下面是我的一些代碼:使用數組和列表的Java類

public class Store 
    { 
     public static void main(String[] args) { 
      Book book1 = new Book(); 
      Book book2 = new Book(); 
      Book book3 = new Book(); 

      printAll(); 
     } 

     public void printAll(){ 
      for(String book : booksOnHand){ 
       super.print() 
      } 
     }  
    } 

    public class Book extends Store 
    { 
     private String title; 
     private String author; 
     private int year; 
     int[] stock = new int[4];//how many books are on hand at each of 5 stores 

     String [] books = {"War and Peace, Leo Tolstoy, 1869, 12, 7, 3, 9", 
          "Little Women, Louisa May Alcott, 1868, 4, 5, 2, 8", 
          "To Kill A Mockingbird, Harper Lee, 1960, 21, 18, 13, 6", 
          }; 

     ArrayList<Book> booksOnHand = new ArrayList<Book>(); 

     public Book(String title, String author, int year, int [] stock) 
     { 
      this.title = title; 
      this.author = author; 
      this.year = year; 
      this.stock = stock;  
     } 

     public String getTitle() 
     { 
      return title; 
     } 

     public String getAuthor() 
     { 
      return author; 
     } 

     public String getYear() 
     { 
      return year; 
     } 

     public int[] getStock() 
     { 
      return stock; 
     } 

     public void setTitle(String title) 
     { 
      this.title = title; 
     } 

     public void setAuthor(String author) 
     { 
      this.author = author; 
     } 

     public void setYear(int year) 
     { 
      this.year = year; 
     } 

     public void setStock(int count1, int count2, int count3, int count4) 
     { 
      stock[0] = count1; 
      stock[1] = count2; 
      stock[2] = count3; 
      stock[3] = count4; 
     } 

     void print() 
     { 
       System.out.println("Title: " + getTitle() + "\tAuthor: " + getAuthor() + "\tYear: " + getYear() + "\tStock: " + Arrays.toString(getStock())); 
     } 
    } 

我有,我試過太多的代碼,包括Collections.addAll(booksOnHand, books);

,但我不知道放在哪裏ArrayList和如何實例化它,所以我可以在我的其他班級中使用它。預先感謝所有願意幫助的人!

+1

您已經閱讀來自編譯器的錯誤信息?他們告訴你什麼是錯的,在哪裏。你不應該忽視它們。另外,爲什麼地獄書擴展存儲?書不是商店。所以Book不應該擴展Store。爲什麼一本書包含其他書籍?爲什麼一本書有股票?嘗試建模現實:商店有書。一本書沒有書。 –

回答

1

我做了一些更正,請嘗試下面的代碼。我在代碼中添加了一些評論。

import java.util.ArrayList; 
import java.util.List; 

public class Store { 
    private static List<Book> booksOnHand = new ArrayList<Book>(); 
    public static void main(String[] args) { 
     // you should create you object with your constructure 
     Book book1 = new Book("War and Peace", "Leo Tolstoy", 1869, 12, 7, 3, 9); 
     Book book2 = new Book("Little Women", "Louisa May Alcott", 1868, 4, 5, 2, 8); 
     Book book3 = new Book("To Kill A Mockingbird", "Harper Lee", 1960, 21, 18, 13, 6); 
     // add them into a list 
     booksOnHand.add(book1); 
     booksOnHand.add(book2); 
     booksOnHand.add(book3); 
     printAll(); 
    } 

    public static void printAll() { 
     // print them with its own object method. 
     for (Book book : booksOnHand) { 
      book.print(); 
     } 
    } 
} 


import java.util.Arrays; 
// book shouldn't extends store, so I removed that 
public class Book { 
    private String title; 
    private String author; 
    private int year; 
    int[] stock = new int[4];// how many books are on hand at each of 5 stores 

    // with int...(vararg) you can add stocks of stores 
    public Book(String title, String author, int year, int...stock) { 
     this.title = title; 
     this.author = author; 
     this.year = year; 
     this.stock = stock; 
    } 

    public String getTitle() { 
     return title; 
    } 

    public String getAuthor() { 
     return author; 
    } 

    public int getYear() { 
     return year; 
    } 

    public int[] getStock() { 
     return stock; 
    } 

    public void setTitle(String title) { 
     this.title = title; 
    } 

    public void setAuthor(String author) { 
     this.author = author; 
    } 

    public void setYear(int year) { 
     this.year = year; 
    } 

    // use varargs instead of "int count1, int count2, int count3, int count4" 
    public void setStock(int... stock) { 
     this.stock = stock; 
    } 

    void print() { 
     System.out.println("Title: " + getTitle() + "\tAuthor: " + getAuthor() 
       + "\tYear: " + getYear() + "\tStock: " 
       + Arrays.toString(getStock())); 
    } 
} 

打印:

標題:戰爭與和平作者:列夫·托爾斯泰年份:1869年股票:12,7,3,9]

標題:小女子作者:路易莎梅阿爾奧爾科特年份:1868庫存:[4,5,2,8]

名稱:殺死一模仿鳥著者:哈珀李年份:1960庫存:[21,18,13,6]

+0

非常感謝您的幫助!雖然它確實有幫助,但我仍然需要使用原始數組並找到一種將THAT放入arrayList的方法,所以會繼續尋找。謝謝! – justkrys

1

想想Java類在它們在現實生活中代表的對象。本書不應該擴展商店。當你使用擴展時,你會說「這個對象就像這個,但更具體。」

所以你可能有一個叫做Vehicle的類。所有車輛都有發動機。但是你可能有不同種類的車輛做不同的事情。所以你可能有一輛延長車輛的班級車和一輛延長車輛的班級船。他們都有引擎,但動作不同。這個概念被稱爲繼承。在你的情況下,沒有必要使用它。

類和對象也有區別。一個班級就像一個藍圖。 Class Car知道汽車需要知道的所有事情。當您從Car類創建對象時,您可以指定顏色,速度等屬性。這就是爲什麼您不需要一系列標題等等。藍圖不需要特定的值,只需要知道將會有一個名爲標題的字符串,它將在您創建圖書時包含標題。

在你的情況下,想想書店是如何運作的。書店的一本書的記錄是否知道其他商店是否擁有該書。我也有一個不同的叫做main的類,你有你的主要方法,然後把Store作爲一個類來表示一個擁有書籍的商店。把你的ArrayList放在這個類中,並且使用存儲中的方法來訪問每個標題的手數。

一般的設立應該更像:

public class Main { 

    public static void main(String[] args) { 

     Store barnesAndNoble = new Store(); 

     Book book1 = new Book("War and Peace", "Leo Tolstoy", 1869, 12, 7, 3, 9); 
     Book book2 = new Book("Little Women", "Louisa May Alcott", 1868, 4, 5, 2, 8); 
     Book book3 = new Book("To Kill A Mockingbird", "Harper Lee", 1960, 21, 18, 13, 6); 

     barnesAndNoble.add(book1); 
     barnesAndNoble.add(book2); 
     barnesAndNoble.add(book3); 

     barnesAndNoble.printAll(); 

     Store amazon = new Store(); 
     amazon.add(book1); 
     amazon.add(book2); 
     amazon.add(book3); 

     amazon.printAll(); 
    } 
} 

public class Book { 
    //code pertaining to books, no stock information 
} 

public class Store { 

    private List<Book> booksOnHand; 

    public Store() { 
     booksOnHand = new ArrayList<Book>(); 
    } 

    public void add(Book book) { 
     booksOnHand.add(book); 
    } 

    //other methods for accessing the list of books, returning inventory numbers from list, or other code pertaining to listing store information 

    public void printAll(){ 
     //print each books desired information 
    } 

} 
+0

我非常欣賞這個解釋!原始陣列如何適應這一點呢?我是否會在Book book1 = new Book(super.books [0])中引用它? – justkrys