这涉及到一个问题,我刚才问: Iterating through hashmap and creating unique objects - trying to prevent duplicates通过HashMap的迭代 - 抛出异常
虽然我认为我可以申请一个类似的逻辑,我的删除方法,我有我的add方法,异常我必须检查一个不存在的记录是否被抛出,即使我非常清楚记录存在,应该删除。我的删除方法如下:
public boolean removePatron(int libraryCardNumber) throws PatronException {
boolean patronRemoved = false;
int keyToRemove = 0;
for (Map.Entry<Integer, Patron> entry : patrons.entrySet()) {
if (entry.getValue().getCardNumber() != libraryCardNumber) {
throw new PatronException("This record does not exist");
}
keyToRemove = entry.getKey();
}
patrons.remove(keyToRemove);
patronRemoved = true;
return patronRemoved;
}
仅供参考,顾客对象是这样的:
public class Patron {
//attributes
private String name = null;
private int cardNumber = 0;
//operations
public Patron (String name, int cardNumber){
this.name = name;
this.cardNumber = cardNumber;
}
public String getName(){
return name;
}
public int getCardNumber(){
return cardNumber;
}
}
我的测试是第一次增加了三个顾客,然后试图通过卡号将其删除该我知道会存在。我在我的add方法中添加了一个赞助人号码的println,所以我可以很容易地看到他们,同时在eclipse中随着它的添加而搞乱。
@Test
public void testRemovePatron() {
boolean exceptionThrown = false;
try {
testLibrary.addPatron("TestName");
testLibrary.addPatron("TestName2");
testLibrary.addPatron("TestName3");
testLibrary.removePatron(1);
} catch (PatronException e) {
System.out.println(e.getMessage());
exceptionThrown = true;
fail("what the hell is going on");
}
assertFalse(exceptionThrown);
}
我从每次抛出的remove方法中得到异常。
编辑:我做了一个小的变化所提供的答案,考虑到需要抛出一个异常,如果没有找到匹配:
public boolean removePatron(int libraryCardNumber) throws PatronException {
boolean patronRemoved = false;
int keyToRemove = 0;
for (Map.Entry<Integer, Patron> entry : patrons.entrySet())
{
if (entry.getValue().getCardNumber() == libraryCardNumber)
{
keyToRemove = entry.getKey();
patronRemoved = true;
}
}
if (patronRemoved)
{
patrons.remove(keyToRemove);
} else {
throw new PatronException("This record did not exist");
}
return patronRemoved;
}
你想才达到什么?你的逻辑是什么? –
我有一张可以添加到的赞助人名单的地图,如下所示:Map.Entry entry:patrons.entrySet()。我想通过提供一个数字来删除记录,然后这个数字将与Patron对象中的卡号相对应,该对象由字符串名称和int cardNumber构成。当顾客被创建时,int卡号与hashmap中赞助人的密钥相同。 –
Benny
什么是例外? – Thihara