我正在创建一个remove方法,该方法通过列表title(string),seller(string)和price(integer)删除项目。此方法旨在遍历每个列表以查找书本。如果找到书本,则应将其从列表中删除(即列表titleMap)。如果找不到书本,我想扔一个BookStoreExeption。

我将如何在方法中引发异常?我曾经考虑过使用while循环,但是不确定如何实现它。

如果有人可以给我任何提示或解决问题的方法,那就太好了。另外,请随时批评代码,我有种感觉,当我测试它时,它将无法正常工作。 (初学者)

@Override
public void remove(IBookItem book) throws BookStoreException{


    for(Iterator<BookEntry<String, ArrayList<BookItem>>> it = titleMap.iterator(); it.hasNext();){
        BookEntry<String, ArrayList<BookItem>> bookEntry = (BookEntry<String,ArrayList<BookItem>>)it.next();
        if(bookEntry.getValue().equals(book.getTitle())){
            bookEntry.getValue().remove(book);
            titleMap.remove();
            System.out.println("book Removed (via titleMap): " + book);
        }
    }

    for(Iterator<BookEntry<String, ArrayList<BookItem>>> it = titleMap.iterator(); it.hasNext();){
        BookEntry<String, ArrayList<BookItem>> bookEntry = (BookEntry<String,ArrayList<BookItem>>)it.next();
        if(bookEntry.getValue().equals(book.getSeller())){
            bookEntry.getValue().remove(book);
            sellerMap.remove();
            System.out.println("Book Removed (via sellerMap): " + book);
        }
    }

    for(Iterator<BookEntry<String, ArrayList<BookItem>>> it = titleMap.iterator(); it.hasNext();){
        BookEntry<String, ArrayList<BookItem>> bookEntry = (BookEntry<String,ArrayList<BookItem>>)it.next();
        if(bookEntry.getValue().equals(book.getPrice())){
            bookEntry.getValue().remove(book);
            titleMap.remove();
            System.out.println("Book Removed (via priceMap): " + book);
        }
    }




}

最佳答案

在方法的开头使用初始false值创建一个布尔变量。如果找到其中一项,则将其设置为true,然后在方法末尾检查变量:

@Override
public void remove(IBookItem book) throws BookStoreException{

boolean itemFound = false;

for(Iterator<BookEntry<String, ArrayList<BookItem>>> it = titleMap.iterator(); it.hasNext();){
    BookEntry<String, ArrayList<BookItem>> bookEntry = (BookEntry<String,ArrayList<BookItem>>)it.next();
    if(bookEntry.getValue().equals(book.getTitle())){
        itemFound  = true;
        bookEntry.getValue().remove(book);
        titleMap.remove();
        System.out.println("book Removed (via titleMap): " + book);
    }
}

//here other loops

if (!itemFound){
    throw new BookStoreException("Item not found!");
}}


更多提示:
1.使用it.remove()代替titleMap.remove(),它将无法正常工作(如果更改集合,则迭代器将无效)
2.更正第二和第三循环中的集合名称,注意复制粘贴。

10-06 10:03
查看更多