0

Hope everyone is okay, I have been searching for a while for a solution for my problem but all my searches seemed to fail, I would like to know how to add a new book into the array of Books I created on the Library class, I have sorted out the rest of the methods, but this is the only one I could not figure.

public class Book {

    String title;
    boolean borrowed;

    // Creates a new Book
    public Book(String bookTitle) {
        title = bookTitle;
    }

    public void rented() {
        borrowed = true;
    }
    // Marks the book as rented
    public void borrowed() {
       borrowed = true;
    }

    // Marks the book as not rented
    public void returned() {
        borrowed = false;
    }

    // Returns true if the book is rented, false otherwise
    public boolean isBorrowed() {
       if(borrowed)
           return true;

           return false;
    }

    // Returns the title of the book
    public String getTitle() {
        return title;
    }

    public static void main(String[] arguments) {
        // Small test of the Book class
        Book example = new Book("The Da Vinci Code");
        System.out.println("Title (should be The Da Vinci Code): " + example.getTitle());
        System.out.println("Borrowed? (should be false): " + example.isBorrowed());
        example.rented();
        System.out.println("Borrowed? (should be true): " + example.isBorrowed());
        example.returned();
        System.out.println("Borrowed? (should be false): " + example.isBorrowed());
    }

}

public class Library {
    String libraryAddress;
    Book[] books = new Book[4];
    public Library(String address) {
        libraryAddress = address;
    }



    public static void main(String[] args) {
        // Create two libraries
        Library firstLibrary = new Library("10 Main St.");
        Library secondLibrary = new Library("228 Liberty St.");

        // Add four books to the first library
        firstLibrary.addBook(new Book("The Da Vinci Code"));    
        firstLibrary.addBook(new Book("Le Petit Prince"));
        firstLibrary.addBook(new Book("A Tale of Two Cities"));
        firstLibrary.addBook(new Book("The Lord of the Rings"));

        // Print opening hours and the addresses
        System.out.println("Library hours:");
        printOpeningHours();
        System.out.println();

        System.out.println("Library addresses:");
        firstLibrary.printAddress();
        secondLibrary.printAddress();
        System.out.println();

        // Try to borrow The Lords of the Rings from both libraries
        System.out.println("Borrowing The Lord of the Rings:");
        firstLibrary.borrowBook("The Lord of the Rings");
        firstLibrary.borrowBook("The Lord of the Rings");
        secondLibrary.borrowBook("The Lord of the Rings");
        System.out.println();

        // Print the titles of all available books from both libraries
        System.out.println("Books available in the first library:");
        firstLibrary.printAvailableBooks();
        System.out.println();
        System.out.println("Books available in the second library:");
        secondLibrary.printAvailableBooks();
        System.out.println();

        // Return The Lords of the Rings to the first library
        System.out.println("Returning The Lord of the Rings:");
        firstLibrary.returnBook("The Lord of the Rings");
        System.out.println();

        // Print the titles of available from the first library
        System.out.println("Books available in the first library:");
        firstLibrary.printAvailableBooks();
    }

    private void returnBook(String bookTitle) {
        for(int i = 0; i<books.length; i++)
        {
            if(!(books[i].title == bookTitle))
            continue;
            else if(books[i].title == bookTitle && books[i].isBorrowed() == true)
                 books[i].returned();


        }
    }

    private void printAvailableBooks() {
        for(int i = 0; i<books.length; i++)
        {
            System.out.println("Avaiable book: " + books[i].title);
        }

    }

    private void borrowBook(String bookTitle) {

        for(int i = 0; i<books.length; i++)
        {
            if((books[i].title != bookTitle))
            continue;
            else if(books[i].title == bookTitle && books[i].isBorrowed() == false)
            {
                 books[i].borrowed();
                 System.out.println("You successfully borrowed " + bookTitle);

            }
            else
                 System.out.println("Sorry, this book is already borrowed.");
        }

    }

    public void printAddress() {
        System.out.println(libraryAddress);
    }

    public static void printOpeningHours() {

         System.out.println("Libraries are open daily from 9am to 5pm.");
    }

    public void addBook(Book book) {

     // here comes my issue
    }
}
jehna1
  • 3,110
  • 1
  • 19
  • 29

2 Answers2

1

One possible option is to check for the first null, and fill it with the book.

public void addBook(Book book) {
    for (int i = 0; i < books.length; i++) {
        if (books[i] == null) {
            books[i] = book;
            return;
        }
    }
}

This will work to fill your previously created books array, but once you fill that; it will not resize the array. You could use Arrays.copyOf(T[], int) to create a new array that is one larger. Like,

public void addBook(Book book) {
    for (int i = 0; i < books.length; i++) {
        if (books[i] == null) {
            books[i] = book;
            return;
        }
    }
    books = Arrays.copyOf(books, books.length + 1);
    books[books.length - 1] = book;
}

or use an ArrayList instead of an array1.

List<Book> books = new ArrayList<>();
public void addBook(Book book) {
    books.add(book);
}

1Refactoring the rest of the code left as an exercise for the reader.

Elliott Frisch
  • 198,278
  • 20
  • 158
  • 249
0

You could have used List <Book> books = new ArrayList <>(); and in your addBook method you could have just used books.add (book); But as you have decided to use Array, you can simply have an integer type variable (numOfBooks) . Initilize it to 0. in your addBook method just use : books[numOfBooks] = book; numOfBooks++; Before adding book you can check for empty slots available in your arrays.

Mr Lister
  • 45,515
  • 15
  • 108
  • 150
nits.kk
  • 5,204
  • 4
  • 33
  • 55