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"); }
关键修复说明
- 循环重试机制:使用
do-while循环,确保用户输入的名称不重复才会退出循环,进入下一步输入尝试次数的环节 - 优化重复检查逻辑:用增强for循环遍历
eventList,找到重复后立即终止遍历,同时清晰标记重复状态,逻辑更直观 - 修复输出流程:每次输入名称前都会打印规范提示,重复时仅输出错误信息,不会出现混乱的连续输出
- 输入处理优化:添加
trim()处理输入的名称,避免用户输入空格导致的无效名称;保留scan.nextLine()处理nextInt后的换行符,防止后续输入出现异常
测试效果
当输入已存在的名称"Jacob"时,程序会输出:
Event name: Jacob Jacob has already been added Event name:
直到你输入一个不存在的名称,才会继续提示输入尝试次数。
内容的提问来源于stack exchange,提问作者Zakan
相关产品推荐
相关产品推荐

