如何实现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
相关产品推荐
相关产品推荐

