2016-03-02 5 views
-1

Я смотрел на это целую вечность, и я не могу понять, почему он не может найти listOfBooks. Я определил его неправильно в моем public class Library? Вот код:Я получаю сообщение об ошибке - не могу найти символ listOfBooks

Library.java

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

public class Library { 
    private List<Book> listOfBooks; 
    private int capacity; 
    private boolean libLimited; 

    public Library() { 
     libLimited = false; 
    } 

    public Library(int inCapacity) { 
     libLimited = true; 
     capacity = inCapacity; 
    } 


    public void addBook(Book newBook) { 
     if (newBook != null && !newBook.equals("")) { 
      throw new IllegalArgumentException("Can't be empty"); 
     } 
     listOfBooks.add(newBook); 
    } 

    public String numberAvailableBooks() { 
     boolean newBookPresent = false; 
     for (Book newBook : listOfBooks) { 
      if (!newBook.isBorrowed()) { 
       return (newBook.getTitle()); 
       newBookPresent = true; 
      } 
     } 
    } 

    public int hasBookWithTitle(String bookTitle) { 
     for (Book book : listOfBooks) { 
      if (bookTitle.equalsIgnoreCase(listOfBooks.getTitle()) == true) { 
       return true; 
      } 
     } 
     return false; 
    } 

    public String getBookWithTitle(String bookTitle) { 
     for (Book book : listOfBooks) { 
      if (bookTitle.equlsIgnoreCase(listOfBooks.getTitle()) == true) { 
       return listOfBooks; 
      } 
     } 
     return null; 
    } 
} 

Book.java

public class Book { 
    private String title; 
    private String author; 
    private int copies; 
    private boolean borrowed; 

    public Book(String inAuthor, String inTitle, int inNumberOfCopies) { 
     this.author = inAuthor; 
     this.title = inAuthor; 
     this.copies = inNumberOfCopies; 
    } 

    public void borrowed() { 
     borrowed = true; 
    } 

    public void rented() { 
     borrowed = true; 
    } 

    public void returned() { 
     borrowed = false; 
    } 

    public boolean isBorrowed() { 
     return borrowed; 
    } 


    public String getAuthor() { 
     return this.author; 
    } 


    public String getTitle() { 
     return this.title; 

    } 

    public int getTotalCopies() { 
     return this.copies; 
    } 

    public int getAvailableCopies() { 


    } 

    public void withdrawCopy() { 
     int found = 0; 
     for (Book b : listOfBooks) { 
      if (b.getTitle().equals(title)) { 
       if (found == 0) { 
        found = 1; 
       } 
       if (!b.isBorrowed()) ; 
       { 
        b.borrowed = true; 
        found = 2; 
        break; 
        throw new IllegalStateException("Nothing to Withdraw"); 
       } 
      } 
     } 

    } 

    public String returnCopy() { 
     boolean found = false; 
     for (Book book : listOfBooks) { 
      if (book.getTitle().equals(title) && book.isBorrowed()) { 
       book.returned(); 
       found = true; 
       break; 
       throw new IllegalStateException("Cannot Return"); 
      } 
     } 
    } 
} 

Может кто-нибудь сказать мне, что я делаю неправильно?

+0

Вы можете включать полное сообщение об ошибке, в том числе номера строки? –

+0

символ: переменная listOfBooks местоположение: класс Книга ./Book.java:120: error: не найти символ для (Книжная книга: списокOfBooks) { – Dafzr308

+0

Ошибка в Book.java, вы только показали нам Library.java. Включите также свой класс Book. –

ответ

0

listOfBooks является частной переменной в классе библиотеки и поэтому недоступен в классе Book. Вы, вероятно, следуешь сделать акцесор такие как

public static List<Book> getListOfBooks() { 
    return listOfBooks; 
} 

в классе библиотеки, то вы можете получить доступ к списку библиотечных книг в других классах по телефону Library.getListOfBooks(). В этом случае вам также нужно будет изменить объявление listOfBooks на статичное. Вы также можете настроить его так, чтобы listOfBooks не был статичным, но тогда вам нужно будет прикрепить объект Library к объекту Book, чтобы получить доступ к этой переменной listOfBooks.

Вот больше информации об этой схеме: https://docs.oracle.com/javase/tutorial/java/javaOO/variables.html

In the spirit of encapsulation, it is common to make fields private. This means that they can only be directly accessed from the Bicycle class. We still need access to these values, however. This can be done indirectly by adding public methods that obtain the field values for us:

+0

Спасибо, сейчас работает! – Dafzr308

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