ArrayList内容重复打印问题求助:代码运行时列表内容重复输出3次
解决ArrayList内容重复打印的问题
Hey,我来帮你搞定这个重复打印的问题~先看看你的代码里出了啥问题:
问题根源
你现在的代码有两个关键问题导致重复打印和错误提示:
- 打印list的循环嵌套在了遍历books的循环里:每遍历一个books中的key,就会把当前list里的内容打印一遍。比如当找到第一个符合
startsWith(title)的书时,list里有1个元素,打印1次;找到第二个时,list里有2个元素,又打印2次,以此类推,最终就会出现重复打印的情况。 - "Book not found"提示时机不对:当前代码里每遇到一个不匹配的key就会打印这个提示,这会导致多次输出错误信息,而不是在所有key都检查完确实没找到时才提示。
修改后的代码
static ArrayList<String> list = new ArrayList<String>(); static HashMap<String, Character> books = new HashMap<String, Character>(); public static void main(String[] args){ // Title, Section books.put("Harry Potter and the blank blank blank", 'A'); books.put("Harry Potter and the blank", 'Z'); books.put("Harry Potter ", 'Z'); books.put("Harry Potter and the blank blank", 'L'); findBook("Harry"); } public static void findBook(String title){ list.clear(); boolean foundExactMatch = false; for (String key : books.keySet()) { if(key.equalsIgnoreCase(title)){ System.out.println(books.get(key)); foundExactMatch = true; } else if (key.startsWith(title)) { list.add(key); } // 移除原来的else分支,避免每次不匹配都提示 } // 遍历完所有书籍后,统一打印找到的匹配列表 for(String bookTitle : list){ System.out.println("Book: " + bookTitle); } // 只有当完全没找到匹配(精确匹配和前缀匹配都没有)时,才提示未找到 if(!foundExactMatch && list.isEmpty()){ System.out.println("Book not found"); } }
修改说明
- 调整打印位置:把遍历list打印的代码移到了遍历books的循环外面,这样所有符合条件的书籍都加入list后,只会统一打印一次,不会重复。
- 优化未找到提示:新增了
foundExactMatch变量标记是否有精确匹配,遍历完所有书籍后,只有当精确匹配和前缀匹配都为空时,才输出"Book not found",避免错误的重复提示。 - 移除多余的else分支:原来的else分支会在每个不匹配的key时触发提示,现在去掉后,只会在最终确认没找到时才提示。
这样修改后,就能解决重复打印的问题,输出也会更符合预期啦~
内容的提问来源于stack exchange,提问作者S1ant
相关产品推荐
相关产品推荐

