用于创建不同类的新对象的Java方法参数

时间:2014-02-28 00:41:37

标签: java

我已经搜索了这个问题的解决方案,最后在这里注册,看看是否有人可以指出我无疑是一个逃避我的简单解决方案。我正在麻省理工学院的OpenCourse工作,自学Java并且很难解决这个问题。

我有两个课程,图书馆图书。该程序会跟踪为每个库创建的书籍,它们的位置以及是否已签出。我获得了无法编辑的图书馆主要方法。相反,必须构建其方法以产生所需的输出。我遇到的问题是确定要传递给中的方法的参数语法,该方法在 方法中创建一个新的 Book >库

相关图书馆代码:

package mitPractice;

public class Library {
    String library_address;
    static String library_hours = "Libraries are open daily from 9AM to 5PM";
    Book[] catalog;

    //List of Methods for Libraries
    public Library(String address) {
    library_address = address;
    }

    public static void printOpeningHours() {
        System.out.println(library_hours);
    }

    public void addBook(/*unsure what parameter to add here*/) {
            catalog[ (catalog.length + 1)] = //unknown parameter

    }

    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 ***This block of code is the problem and is uneditable
        firstLibrary.addBook(new Book("A Game of Thrones"));
        firstLibrary.addBook(new Book("Rama"));
        firstLibrary.addBook(new Book("Understanding Space"));
        firstLibrary.addBook(new Book("Way of the Clans"));

所以我的问题是如何使方法与方法中给出的代码兼容?我已经尝试了许多用于传递给addBook()的参数组合,似乎没有传递。

图书代码:

package mitPractice;

public class Book {

    Boolean isCheckedOut = false;
    String book_title;

    public Book(String title) {
        book_title = title;
    }

    public void Borrow() {
        isCheckedOut = true;
    }

    public void Return() {
        isCheckedOut = false;
    }

    public boolean isBorrowed() {
        if (isCheckedOut == true) {
        return true;
        } else {
                return false;
        }
    }

    public String getTitle() {
        return book_title;
    }

    /*public static void main(String[] args) {
        Book example = new Book("A Game of Thrones");
        System.out.println("Title: " + example.getTitle());
        System.out.println("Borrowed?: " + example.isBorrowed());
        example.Borrow();
        System.out.println("Borrowed?: " + example.isBorrowed());
        example.Return();
        System.out.println("Borrowed?: " + example.isBorrowed());

    }*/

 }

3 个答案:

答案 0 :(得分:0)

这总是以数组越界结束:

   public void addBook(/*unsure what parameter to add here*/) {
            catalog[ (catalog.length + 1)] = //unknown parameter

    }

实际上,最好的方法是使用List:

public class Library {
    List<Book> catalog = new ArrayList<>();
    ...
}

然后你可以这样做:

   public void addBook(Book book) {
            catalog.add(book);

    }

答案 1 :(得分:0)

您希望参数的类型为Book:

public void addBook(Book newBook) {
    catalog[(catalog.length + 1)] = newBook;
}

这会抛出一个ArrayIndexOutOfBoundsException,因为你试图在最后一个索引之后将一个元素放在数组中。您需要跟踪已添加的书籍数量,并在数据填满时重建它们。像这样:

private int numberOfBooks = 0;
public void addBook(Book newBook) {
    numberOfBooks++;
    if(numberOfBooks >= catalog.length) {
        // Rebuild array
        Book[] copy = new Book[catalog.length * 2]
        for(int i=0; i<catalog.length; i++){
            copy[i] = catalog[i];
        }
        catalog = copy;
    }
    catalog[numberOfBooks] = newBook;
}

或使用像java.util.ArrayList这样的集合。

所以不要使用这一行:

Book[] catalog;

你可能有

ArrayList<Book> catalog = new ArrayList<Book>();

这将创建一个ArrayList,它是动态大小的数组的Java实现。

然后您的addBook方法可能如下所示:

public void addBook(Book newBook) {
    catalog.add(newBook);
}

要使用ArrayList,您需要在package mitPractice;行之后的文件开头包含此行:

import java.util.ArrayList;

答案 2 :(得分:-1)

试试这段代码。这将为一个非常重要的数据结构添加一本书,该数据结构称为java中的util包中的ArrayList。程序员必须在类语句之前但在任何package语句之后导入它。当书籍成功添加到ArrayList时,代码还使用Book API中的方法打印标题。 ArrayLists优于Arrays,因为java.util.ArrayList可以毫无问题地扩展,而Array是一个固定的大小,并不是那么动态。

查看我修改过的编译和运行的库类的代码。

   package mitPractice;

import java.util.ArrayList;

public class Library {
String library_address;
static String library_hours = "Libraries are open daily from 9AM to 5PM";
ArrayList<Book> books = new ArrayList<Book>();

//List of Methods for Libraries
public Library(String address) {
library_address = address;
}

public static void printOpeningHours() {
    System.out.println(library_hours);
}

public void addBook(Book b/*unsure what parameter to add here*/) {

books.add(b); // add the book to the ArrayList
System.out.println("The book: " + b.getTitle() + " was successfully added.");

}

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 ***This block of code is the problem and is uneditable
    firstLibrary.addBook(new Book("A Game of Drones"));
    firstLibrary.addBook(new Book("Raman Noodles"));
    firstLibrary.addBook(new Book("Understanding Space"));
    firstLibrary.addBook(new Book("Way of the Yoga Baywatch Babes"));
} // end main

 } // end Library class

我希望这会有所帮助。

一切顺利,

user_loser