問題出在方法上getName()public class Phonebook implements PhonebookInterface { private Map<String, Set<String>> phonebook; private Map<String, Address> address; public Phonebook() { this.phonebook = new HashMap<String, Set<String>>(); this.address = new HashMap<String, Address>(); } @Override public void addNumber(String person, String number) { if (!this.phonebook.containsKey(person)) { this.phonebook.put(person, new HashSet<String>()); } this.phonebook.get(person).add(number); } @Override public void getName(String number) { for (String person : this.phonebook.keySet()) { if (this.phonebook.get(person).contains(number)) { System.out.println(" " + person); } else { System.out.println(" not found"); } } } @Override public void getNumber(String person) { try { for (String n : this.phonebook.get(person)) { if (this.phonebook.get(person).size() > 1) { System.out.println(" " + n); } else { System.out.println("number: " + n); } } } catch (Exception e) { System.out.println(" not found"); } } public void addAddress(String person, String street, String city) { this.address.put(person, new Address(street, city)); }預期的輸出是:搜索號碼:Pekka:014-1234015-5344Matti:號碼:013-4321通過電話號碼搜索人:Mattinot found但輸出是:搜索號碼:Pekka:014-1234015-5344Matti:號碼:013-4321通過電話號碼搜索人:未找到Mattinot found未找到為什么輸出打印“找不到”3次而不是一次?
1 回答

呼如林
TA貢獻1798條經驗 獲得超3個贊
您遍歷 的所有鍵Map并將相應的值與您要查找的值進行比較。如果沒有匹配,則打印“未找到”。
您Map有兩個鍵,因此如果您正在搜索 中存在的值Map,您將打印匹配的鍵,但您還將為另一個鍵打印“未找到”。
如果您正在搜索 中不存在的值Map,您將打印兩次“未找到”(每個鍵一次)。
您應該只在遍歷所有鍵后打印“未找到”:
public void getName(String number) {
for (String person : this.phonebook.keySet()) {
if (this.phonebook.get(person).contains(number)) {
System.out.println(" " + person);
return;
}
}
System.out.println(" not found");
}
添加回答
舉報
0/150
提交
取消