如何将元素添加到自定义类型的数组

时间:2016-03-12 19:21:50

标签: java arrays

希望大家都好,我一直在寻找解决问题的方法,但我的所有搜索似乎都失败了,我想知道如何在我在图书馆创建的图书数组中添加新书我已经整理了其余的方法,但这是我唯一无法想象的方法。

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
    }
}

2 个答案:

答案 0 :(得分:1)

一种可能的选择是检查第一个null,并将其填入书中。

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

这将填充您之前创建的books数组,但一旦填写完毕;它不会调整阵列的大小。您可以使用Arrays.copyOf(T[], int)创建一个更大的新数组。像,

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;
}

使用ArrayList代替数组 1

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

1 重构剩下的代码作为读者练习。

答案 1 :(得分:0)

您可以使用List <Book> books = new ArrayList <>();,在您的addBook方法中,您可以使用books.add(book); 但是,当您决定使用Array时,您可以只使用整数类型变量(numOfBooks)。在你的addBook方法中将它初始化为0.只需使用:books [numOfBooks] = book; numOfBooks ++;在添加book之前,您可以检查阵列中是否有空插槽。