我正在创建一个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.更正第二和第三循环中的集合名称,注意复制粘贴。