我的代码存在很大问题:
public class BookStore
{
private ArrayList<Book> books;
}
/**
* This method takes the author's name as a String parameter and returns an
* arraylist of all the books written by that author. It uses a while loop
* and an iterator, locates the books written by that author (case-insensitive)
* and adds them to another arraylist.
*/
public ArrayList<Book> getBooksByAuthor(String authorName){
ArrayList<Book> getBooksByAuthor = new ArrayList<Book>();
Iterator<Book> aBook = books.iterator();
while(aBook.hasNext()){
Book aBookd = aBook.next();
if (authorName.equalsIgnoreCase(aBookd.getAuthor())){
books.add(getAuthor());
books.addAll(getBooksByAuthor);
}
}
return getBooksByAuthor.size();
}
那3行
books.add(getAuthor());
books.addAll(getBooksByAuthor);
和return getBooksByAuthor.size();
我很确定他们完全错了。我尝试了不同的方法,但它没有用。我真的不明白该怎么做。有人能帮助我吗?谢谢你的时间!
答案 0 :(得分:0)
我非常肯定您想要将具有匹配作者姓名的图书添加到新列表中。使用for-each
loop
List<Book> al = new ArrayList<>();
for (Book book : books) {
if (authorName.equalsIgnoreCase(book.getAuthor())) {
al.add(book);
}
}
return al;
或使用明确的Iterator
之类的
List<Book> al = new ArrayList<>();
Iterator<Book> iter = books.iterator();
while (iter.hasNext()) {
Book book = iter.next();
if (authorName.equalsIgnoreCase(book.getAuthor())) {
al.add(book);
}
}
return al;
答案 1 :(得分:0)
是否需要迭代器和while循环而不是foreach循环?
(我认为)你想用正常语言表达的是:我们有一个空的集合/列表作为结果。对于书籍列表中的每本书,检查作者是否具有与给定名称相同的名称 - 如果名称相同,我们将书籍添加到生成的集合/列表中。
在代码中看起来像:
public ArrayList<String> getBooksByAuthor(String authorName) {
ArrayList<Book> result = new ArrayList<Book>();
for (Book aBook : books) { //[for each notation in java ][1]
if (authorName.equals(aBook.getAuthor())) {
result.add(aBook);
}
}
return result;
}
如果您想使用while循环,请在this link中读取foreach / while循环转换。
此外,如评论中所述,您的代码存在一些语义和语法错误:
您尝试将{(1)}个(空)集合addAll
对象添加到您的图书中,而不是在您的getBooksByAuthor
集合中添加一些/单本图书
[1] http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html