2015-11-15 2 views
1

Я пытаюсь изучить Java и сильно борюсь с понимающими классами. У меня есть массив String в классе, который мне нужно поместить в массивList объектов, а затем использовать геттеры и сеттеры для arrayList в методах из другого класса. Вот некоторые из моего кода:Классы 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

Вы читали сообщения об ошибках компилятора? Они говорят вам, что не так и где. Вы не должны игнорировать их. Кроме того, почему в аду книга расширяет Store? Книга не является магазином. Поэтому книга не должна расширять 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]

Название: Маленькие женщины Автор: Louisa May Олкотт Год выпуска: 1868 Наличие на складе: [4, 5, 2, 8]

Название: Убить пересмешника Автор: Харпер Ли Год выпуска: 1960 Наличие на складе: [21, 18, 13, 6]

+0

Большое спасибо за вашу помощь! Хотя это, безусловно, помогает, я все равно должен использовать оригинальный массив и найти способ помещать THAT в массивList, поэтому будет продолжать искать.Спасибо! – justkrys

1

Подумайте о Java-классах в терминах объектов, которые они представляют в реальной жизни. Книга не должна расширять магазин. Когда вы используете extends, вы говорите: «Этот объект похож на этот, но более конкретный».

У вас может быть класс под названием Vehicle. У всех автомобилей есть двигатель. Но у вас могут быть разные виды транспортных средств, которые делают разные вещи. Таким образом, у вас может быть классный автомобиль, который расширяет автомобиль и классную лодку, которая расширяет автомобиль. У них обоих есть двигатели, но они двигаются по-другому. Эта концепция называется наследованием. В вашем случае нет необходимости использовать его.

Существует также разница в классе и объекте. Класс похож на план. Class Car знает все, что автомобиль должен знать. Когда вы создаете объект из класса Car, вы указываете свойства, такие как цвет, скорость и т. Д. Вот почему вам не нужен массив названий и т. Д. Проект не нуждается в конкретных значениях, только для того, чтобы знать, что будет строка с названием title, которая будет содержать заголовок при создании книги.

В вашем случае подумайте, как работает книжный магазин. Знает ли книжный магазин книгу о том, есть ли в других магазинах эта книга. №

У меня также был бы другой класс, называемый 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

Я очень ценю объяснения! Как исходный массив вписывается в это, хотя? Я бы просто упомянул об этом в Книге Book1 = новой книге (super.books [0])? – justkrys

Смежные вопросы