Java中检查输入数组重复用户名?代码排错求助
问题分析与修复方案
核心问题点
- 重复判断逻辑完全错误:你写的
travelerNames[i].equals(travelerNames[i])是让字符串和自身比较,这永远返回true,所以每次输入都会触发重复提示,导致input一直为false,循环无法正常结束。 - Scanner输入方法混用:
nextLine()和next()混用会导致输入缓冲区残留换行符,后续nextLine()可能读取到空字符串,引发输入异常。 - 未实现真正的去重逻辑:没有将当前输入的姓名和已经录入的前序姓名做对比,根本没检查是否和已存在的姓名重复。
修复步骤
- 替换错误的重复判断:遍历已经录入的前i个姓名(第i位是当前正在输入的,0到i-1是已录入的),逐一对比是否重复。
- 统一Scanner输入方法:全程使用
nextLine()读取输入,避免缓冲区问题。 - 调整循环逻辑:检测到重复或空输入时提示用户重新输入;输入有效时才退出循环并存入数组。
修复后的完整代码
import java.util.Scanner; public class TravelerInput { public static void main(String[] args) { final int numPassengers = 4; boolean inputValid = false; String[] travelerNames = new String[numPassengers]; Scanner scanner = new Scanner(System.in); for (int i = 0; i < numPassengers; ++i) { System.out.println("Enter traveler name:"); do { String currentName = scanner.nextLine().trim(); // 检查空输入 if (currentName.isEmpty()) { System.out.println("Name cannot be empty! Enter again:"); inputValid = false; continue; } // 检查与已录入姓名重复 boolean isDuplicate = false; for (int j = 0; j < i; j++) { if (currentName.equals(travelerNames[j])) { isDuplicate = true; break; } } if (isDuplicate) { System.out.println("This name already exists! Enter a new name:"); inputValid = false; } else { travelerNames[i] = currentName; inputValid = true; } } while (!inputValid); System.out.println("Successfully added: " + travelerNames[i]); } scanner.close(); // 输出最终结果 System.out.println("\nFinal traveler list (no duplicates):"); for (String name : travelerNames) { System.out.println(name); } } }
额外优化说明
- 加入
trim()处理输入,避免用户输入空格导致的空值或假重复。 - 增加空输入检查,防止用户直接回车输入空字符串。
- 如果需要忽略姓名大小写差异(比如"Alice"和"alice"视为重复),可以把
equals()改成equalsIgnoreCase()。
内容的提问来源于stack exchange,提问作者Swiftjezta
相关产品推荐
相关产品推荐

