ArrayList图书搜索

Chr*_*ell 4 java arrays search arraylist bluej

我要在bluej中创建一个图书馆系统,它必须能够搜索一本书.但是,我有一个问题.当我尝试搜索一本书时,结果总是没有可用的书籍......我如何对此进行排序,以便结果显示该书可用?

private List<Book> collection;

public Library()
{
    collection = new ArrayList<Book>();
}

public void addBook(Book book)
{
    collection.add(book);
}

public String titleSearch()
{
    String titleSearch = "\n ";
    for(int i = 0; i < collection.size(); i++){
        if(titleSearch.equalsIgnoreCase(collection.get(i).getTitle())){

            titleSearch = ("\n Book Avaliable");

        }else{
            titleSearch = ("\n No Books Avaliable ");
        }
    }
    return titleSearch;
}
Run Code Online (Sandbox Code Playgroud)

ami*_*mit 5

首先,在您的代码中 - 只有最后一本书很重要,如果您找到合适的书籍,则需要中断,因为在找到书籍后无需检查提醒(并将值重置为"未找到书籍") .

for(int i = 0; i < collection.size(); i++){
    if(titleSearch.equalsIgnoreCase(collection.get(i).getTitle())){
        titleSearch = ("\n Book Avaliable");
        break; //<- added a break here, no need to go on iterating and reset titleSearch later on

    }else{
        titleSearch = ("\n No Books Avaliable ");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您的收藏是空的并且您搜索了一本书(显然不存在),则上述剧照会失败.
您可以通过避免以下方式解决问题并改进解决方案else:

titleSearch = ("\n No Books Avaliable ");
for(int i = 0; i < collection.size(); i++){
    if(titleSearch.equalsIgnoreCase(collection.get(i).getTitle())){
        titleSearch = ("\n Book Avaliable");
        break; //<- added a break here
    }
}
Run Code Online (Sandbox Code Playgroud)

这样你开始悲观 - 书不存在,如果你以后发现它,你就"改变主意",并停止这个结果.

上面仍然缺少你实际上正在寻找的标题,这可以通过添加它作为参数并寻找它来实现:

public String searchTitle(String titleSearch) {
    if (titleSearch == null) return "\n No Books Avaliable ";
    for(int i = 0; i < collection.size(); i++){
        if(titleSearch.equalsIgnoreCase(collection.get(i).getTitle())){
            return "\n Book Avaliable";
        }
    }
    return "\n No Books Avaliable "; //reachable only if no book found
}
Run Code Online (Sandbox Code Playgroud)

最后一点,就是为每个循环使用增强功能:

public String searchTitle(String titleSearch) {
    if (titleSearch == null) return "\n No Books Avaliable ";        
    for(Book b : collection){
        if(titleSearch.equalsIgnoreCase(book.getTitle())){
            return "\n Book Avaliable";
        }
    }
    return "\n No Books Avaliable "; //reachable only if no book found
}
Run Code Online (Sandbox Code Playgroud)