我已经搜索了这个问题的解决方案,最后在这里注册,看看是否有人可以指出我无疑是一个逃避我的简单解决方案。我正在麻省理工学院的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());
}*/
}
答案 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