为了账号安全,请及时绑定邮箱和手机立即绑定

通过输入 HashMap 值获取 HashMap 键未按预期工作

通过输入 HashMap 值获取 HashMap 键未按预期工作

Helenr 2022-07-14 16:27:46
问题出在方法上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"); 

}


查看完整回答
反对 回复 2022-07-14
  • 1 回答
  • 0 关注
  • 60 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信