在找不到项目时抛出异常 - java

时间:2015-10-22 21:08:33

标签: java list exception throw

我正在创建一个删除方法,通过列表标题(字符串),卖方(字符串)和价格(整数)来删除项目。此方法旨在迭代每个列表以查找书籍项目。如果找到了书籍项目,那么它应该从列表中删除(即列出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);
        }
    }   




}

4 个答案:

答案 0 :(得分:3)

在方法开头使用初始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.在第二个和第三个循环中更正集合名称,注意复制粘贴。

答案 1 :(得分:3)

我会使用布尔来跟踪是否找到了这本书。

boolean bookFound = false;
if (/*book item found*/)
{
  bookFound = true;
}
if (!bookFound)
{
  throw new BookStoreException();
}

我不确定抛出异常的原因是什么,但如果原因只是想知道是否删除了某些内容,则可以返回已删除的对象,如果找不到任何内容则返回{{1} }。无论您将此方法称为删除方法,都会检查是否收到了结果或null。这引发了很多关于是否应该使用null的讨论,因为您要删除的对象实际上可能是null。例如:

null

这实际上是Java的if (/*book found*/) { /*perform remove logic*/ return book; } /*other checks and potential returns*/ return null; 执行删除的方式。

答案 2 :(得分:1)

您可以在方法中抛出BookStoreException,如下所示:

if (/* book item not found */) {
    throw new BookStoreException();
}

答案 3 :(得分:1)

如果您找到了停止该方法工作的图书,请使用return

当圈了三次而没有找到这本书时,抛出exception

以下示例:

@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);
            return;
        }
    }

    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);
            return;
        }
    }

    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);
            return;
        }
    }  
    throw new BookStoreException();
}