2016-09-13 4 views
-1
public class Book 
{ 
private String isbn, author, area; 
private int length; 
public Book(String isbn, String author, String area, int length) 
{ 
    this.isbn=isbn; 
    this.author=author; 
    this.area=area; 
    this.length=length; 
} 
public boolean isLong() 
{ 
    if (length>500) 
     return true; 
    else 
     return false; 
}  
} 
public class BookCollection 

{ 
private ArrayList<Book> bookList = new ArrayList<Book>(); 


public BookCollection()throws IOException 
{ 
    Scanner fileScan; 
    String oneLine; 
    String isbn, author, area; 
    int length; 

    fileScan = new Scanner (new File("books.txt")); 
    while (fileScan.hasNext()) 
    { 
     isbn=fileScan.next(); 
     author=fileScan.next(); 
     area=fileScan.next(); 
     length=fileScan.nextInt(); 
     bookList.add(new Book(isbn, author, area, length)); 
    } 
} 
public class TestBookCollection 
{ 

public static void main (String[] args)throws IOException 
{ 
    BookCollection books = new BookCollection(); 
    System.out.println(books); 


} 
} 

여기에 관련 코드가 있습니다. 내 프로젝트는이 책에 대한 정보가있는 텍스트 파일을 읽고 도서 개체의 arraylist에 넣는 것입니다. 내 질문은 : 어떻게 arLylist에있는 개체에 클래스 도서에서 발견 된 isLong() 메서드를 envoking에 갈까요? 메소드의 요점은 객체가> 500 페이지를 가지고 있으면 true를 반환한다는 것입니다. 그렇지 않은 경우는 false를 리턴합니다. 나는 논리에 대해 다소 혼란스럽고 전에 Arraylists와 함께 일한 적은 한 번도 없습니다.Java에서 arraylist의 객체에 대한 메소드 사용

+0

thelist.get (theindex) .isLong() –

답변

1

당신은 BookCollection에 다른 방법을 추가 할 수 있습니다

public void printLongBooks() { 
    for (Book book : bookList) { 
    if (book.isLong()) { 
     well, book is long ... 
    } else { 
     obviously, it is short ... 
} 

를 위의 사용하는 소위 당신이 루프 모든 배열/컬렉션에 사용할 수있는 자바 루프 스타일 "각"; 대신 "구 학교"for (int i=0; i<...) 계산 루프.

하고 메인 메소드 내에서, 당신은 단순히 새로운 방법 호출 :

books.printLongBooks() 

그리고 몇 가지 일반적인 힌트 : return length > 500;

:

A) isLong()는 한 - 라이너로 줄일 수있다

B) 을 파일에서 읽는 것은 생성자에서 직접하는 작업이 아닙니다. 대신 생성자 내에서 호출 할 수있는 전용 메서드를 만들어야합니다.

0

생성자 안에 장부 목록을 만들려면 논리를 두는 대신 arraylist를 반환하는 getBookCollection() 메서드를 만들어야합니다. .

public List<Book> BookCollection()throws IOException 
    { 

     List<Book> bookList = new ArrayList<Book>(); 
     //logic to create booklist 

     return booklist; 
    } 

일단 책 목록이 있으면 향상된 for 루프를 실행하고 각 책의 페이지를 확인할 수 있습니다.

for(Book book: bookList){ 
     if(book.isLong()){ 
      //logic 
     } else { 
      //logic 
     } 
    } 
0

당신은 ArrayList의 요소를 반복하고 각 개체에 하나의 메소드를 호출하는 for 루프를 사용할 수 있습니다.

for(Book book : bookList){ 
    boolean isLong = book.isLong(); 
} 
0

당신은 List의 각 인덱스가 Book 포함하는 List<Book>을 보유하고 있습니다. List.get(index) 방법을 사용하여 을 주어진 List 색인으로 가져옵니다. 예 : bookList.get(0)은 인덱스 0에서 Book이됩니다. Object을 얻은 후에는 정상적으로 사용할 수 있습니다.

bookListBookCollection 안에 넣고 이름을 Book으로 설정한다고 가정합니다.

public static void main(String[] args){ 
    BookCollection books = new BookCollection(); // Make a new BookCollection 
    List<Book> booksInCollection = books.getBooksList(); // Get the Books inside BookCollection 
    // Go through each book in booksInCollection 
    for(int index = 0; index < booksInCollection.size(); index++){ 
     // Get the Book Object at index 
     Book currentBook = booksInCollection.get(index); 
     if(currentBook.isLong()){ 
      System.out.println(currentBook.getName() + " is long!"); 
     } 
    } 
} 
0

첫 번째로 (스트림 등을 사용하고 싶지 않은 경우) 먼저 ArrayList에서 객체를 가져와야합니다. 당신은 ArrayList.get(int index)를 사용하여 다음 메소드를 호출 해 각 루프 사용하여 작업을 수행 할 수 있습니다

for(Book book : bookList) { 
    System.out.println(book.isLong()); 
} 

문제는 당신이 주에서 개인 필드 (bookList)에 액세스 할 수 없다는 것입니다. 작동 시키려면 몇 가지 방법이 있습니다.

  • books.bookList
  • 이 BookCollection는 ArrayList를
0

를 확장

  • 이 확인 BookCollection에 bookList에 게터를 확인 대중에게 BookCollection 내부
  • 변경 필드를 공개 방법을 만든 다음 직접 액세스 무엇 여기에서 수행 한 작업은 데코레이터 (BookCollection)이며 ArrayList 추가 기능 (이 경우에는 파일을 기반으로 미리 작성자를 작성하는 생성자)을 사용합니다.

    1. 는 게터를 통해 List 접근을 확인하고 그것을 밖으로 작동이 당신에게 ListBook을 활용하는 방법은 두 가지 옵션을 제공합니다. 문은 갈망하지만이 작은 사용의 양에 대한 허용하게 :

      public boolean isLong(int index) { 
          return bookList.get(index).isLong(); 
      } 
      

      을 그런 단지를 : 당신과 같이, 공통 기능을 제공하는 장식의 방법을 만들어 줄게, 더 일반적으로

      if(books.getBooks().get(index).isLong()) { 
          //The book at index is long 
      } 
      
    2. 비즈니스 로직에서 데코레이터 메소드를 호출하십시오. GhostCat이 제공하는 것과 같은 더 복잡한 방법을 만들 수도 있습니다.

  • 관련 문제