问题出在方法上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
提交
取消