You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现Phonebook类中根据联系人号码数量的差异化打印逻辑

解决Phonebook类getNumber方法的实现问题

咱们先把getNumber方法的逻辑捋顺——原代码里的循环内判断会导致多号码时重复输出"numbers :",这明显不符合预期。正确的思路应该是先拿到该联系人的号码集合,判断集合大小后再决定输出逻辑,具体实现如下:

@Override
public void getNumber(String person) {
    // 先做空值防护,避免联系人不存在时触发空指针异常
    if (!phonebook.containsKey(person)) {
        // 可选:添加联系人不存在的提示,比如 System.out.println(person + " 没有记录的电话号码");
        return;
    }
    
    Set<String> numbers = phonebook.get(person);
    int numberCount = numbers.size();
    
    // 只有当号码数量大于1时,才输出一次"numbers :"
    if (numberCount > 1) {
        System.out.println("numbers :");
    }
    
    // 统一遍历输出所有号码
    for (String n : numbers) {
        System.out.println(n);
    }
}

逻辑拆解:

  • 空值防护:先判断联系人是否在通讯录中,避免调用phonebook.get(person)返回null时触发NullPointerException。
  • 单次判断输出头部:只在号码数量大于1时,提前输出一次"numbers :",不会重复打印。
  • 统一输出号码:不管是单个还是多个号码,最后统一遍历输出所有号码即可。

测试运行结果:

运行你提供的Main类代码后,输出会完全符合预期:

numbers :
014-1234
015-5344
013-4321

额外优化小建议:

  • 如果需要保证号码的输出顺序和添加顺序一致,可以把HashSet换成LinkedHashSet,只需要修改addNumber方法里的集合初始化:
    phonebook.put(person, new LinkedHashSet<String>());
    
  • 可以补充联系人不存在时的提示信息,让程序的交互更友好。

内容的提问来源于stack exchange,提问作者HorrorRice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:56:01