找不到项目时抛出异常 - Java
Throwing an exception when item not found - Java
我正在创建一个删除方法,它通过列表标题(字符串)、卖家(字符串)和价格(整数)删除项目。此方法旨在遍历每个列表以查找图书项目。如果找到该书项,则应将其从列表中删除(即列表 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);
}
}
}
您可以像这样在您的方法中抛出一个 BookStoreException
:
if (/* book item not found */) {
throw new BookStoreException();
}
如果您找到停止该方法工作的书,请使用 return
。
循环3次没找到书时,抛出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();
}
在方法的开头创建一个初始值为 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.use it.remove() 而不是titleMap.remove(),是不行的(如果改变了集合,迭代器就失效了)
2.correct第二个和第三个循环中的集合名称,注意复制粘贴。
我会使用布尔值来跟踪是否找到了这本书。
boolean bookFound = false;
if (/*book item found*/)
{
bookFound = true;
}
if (!bookFound)
{
throw new BookStoreException();
}
我不确定你抛出异常的原因是什么,但如果原因只是想知道是否删除了某些东西,你可以 return 被删除的对象,如果什么都没有发现 return null
。无论您在何处调用此删除方法,您都会检查是否收到了结果或 null
。这引发了很多关于是否应该使用 null 的讨论,因为可能您要删除的对象实际上是 null
。示例:
if (/*book found*/)
{
/*perform remove logic*/
return book;
}
/*other checks and potential returns*/
return null;
这实际上就是 Java 的 Collections
执行删除的方式。
我正在创建一个删除方法,它通过列表标题(字符串)、卖家(字符串)和价格(整数)删除项目。此方法旨在遍历每个列表以查找图书项目。如果找到该书项,则应将其从列表中删除(即列表 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);
}
}
}
您可以像这样在您的方法中抛出一个 BookStoreException
:
if (/* book item not found */) {
throw new BookStoreException();
}
如果您找到停止该方法工作的书,请使用 return
。
循环3次没找到书时,抛出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();
}
在方法的开头创建一个初始值为 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.use it.remove() 而不是titleMap.remove(),是不行的(如果改变了集合,迭代器就失效了) 2.correct第二个和第三个循环中的集合名称,注意复制粘贴。
我会使用布尔值来跟踪是否找到了这本书。
boolean bookFound = false;
if (/*book item found*/)
{
bookFound = true;
}
if (!bookFound)
{
throw new BookStoreException();
}
我不确定你抛出异常的原因是什么,但如果原因只是想知道是否删除了某些东西,你可以 return 被删除的对象,如果什么都没有发现 return null
。无论您在何处调用此删除方法,您都会检查是否收到了结果或 null
。这引发了很多关于是否应该使用 null 的讨论,因为可能您要删除的对象实际上是 null
。示例:
if (/*book found*/)
{
/*perform remove logic*/
return book;
}
/*other checks and potential returns*/
return null;
这实际上就是 Java 的 Collections
执行删除的方式。