これは、私が以前に尋ねた質問に関連してい ます。ハッシュマップを反復処理し、一意のオブジェクトを作成します-重複を防止しようとします
また、addメソッドと同様のロジックを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) {
throw new PatronException("This record does not exist");
}
keyToRemove = entry.getKey();
}
patrons.remove(keyToRemove);
patronRemoved = true;
return patronRemoved;
}
参考までに、Patronオブジェクトは次のようになります。
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;
}
}
私のテストでは、最初に3人の常連客を追加し、次に、存在することがわかっているカード番号でそれを削除しようとします。addメソッドでPatronの番号の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;
}