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

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");
    }
}

修改说明

  1. 调整打印位置:把遍历list打印的代码移到了遍历books的循环外面,这样所有符合条件的书籍都加入list后,只会统一打印一次,不会重复。
  2. 优化未找到提示:新增了foundExactMatch变量标记是否有精确匹配,遍历完所有书籍后,只有当精确匹配和前缀匹配都为空时,才输出"Book not found",避免错误的重复提示。
  3. 移除多余的else分支:原来的else分支会在每个不匹配的key时触发提示,现在去掉后,只会在最终确认没找到时才提示。

这样修改后,就能解决重复打印的问题,输出也会更符合预期啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:36:11