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

ArrayList重复名称检测问题:输入重复名称后无法重新输入新名称

问题分析与修复方案

你的代码核心问题在于重复名称检查的逻辑没有形成循环重试机制,而且判断逻辑的顺序也有问题,导致输入重复名称后直接跳过名称输入环节,进入了尝试次数的输入步骤。下面是具体的修复方案:

原代码的问题点

  • 重复检查仅执行一次,没有循环让用户重新输入有效名称
  • match变量的赋值和判断逻辑混乱,导致提示信息输出时机错误
  • 没有处理重复输入后的流程跳转,直接进入了后续的尝试次数输入

修复后的完整addEvent()方法

public void addEvent() {
    Scanner scan = new Scanner(System.in);
    
    String eventName = "";
    boolean isDuplicate;
    
    // 循环获取事件名称,直到输入的名称不重复
    do {
        System.out.print("Event name: ");
        eventName = scan.nextLine().trim(); // 去除首尾空格,避免无效输入
        
        isDuplicate = false;
        // 遍历ArrayList检查名称是否重复(忽略大小写)
        for (Event event : eventList) {
            if (event.getName().equalsIgnoreCase(eventName)) {
                isDuplicate = true;
                System.out.println(eventName + " has already been added\n");
                break; // 找到重复后直接退出循环,提升效率
            }
        }
    } while (isDuplicate); // 如果重复,继续循环输入
    
    // 获取尝试次数
    System.out.print("Attempts allowed: ");
    int numberOfTries = scan.nextInt();
    scan.nextLine(); // 消费nextInt后的换行符,避免后续输入异常
    
    // 添加新事件到列表
    eventList.add(new Event(eventName, numberOfTries));
    System.out.println(eventName + " added\n");
}

关键修复说明

  1. 循环重试机制:使用do-while循环,确保用户输入的名称不重复才会退出循环,进入下一步输入尝试次数的环节
  2. 优化重复检查逻辑:用增强for循环遍历eventList,找到重复后立即终止遍历,同时清晰标记重复状态,逻辑更直观
  3. 修复输出流程:每次输入名称前都会打印规范提示,重复时仅输出错误信息,不会出现混乱的连续输出
  4. 输入处理优化:添加trim()处理输入的名称,避免用户输入空格导致的无效名称;保留scan.nextLine()处理nextInt后的换行符,防止后续输入出现异常

测试效果

当输入已存在的名称"Jacob"时,程序会输出:

Event name: Jacob
Jacob has already been added

Event name: 

直到你输入一个不存在的名称,才会继续提示输入尝试次数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:08:22