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

Java中检查输入数组重复用户名?代码排错求助

问题分析与修复方案

核心问题点

  • 重复判断逻辑完全错误:你写的travelerNames[i].equals(travelerNames[i])是让字符串和自身比较,这永远返回true,所以每次输入都会触发重复提示,导致input一直为false,循环无法正常结束。
  • Scanner输入方法混用:nextLine()和next()混用会导致输入缓冲区残留换行符,后续nextLine()可能读取到空字符串,引发输入异常。
  • 未实现真正的去重逻辑:没有将当前输入的姓名和已经录入的前序姓名做对比,根本没检查是否和已存在的姓名重复。

修复步骤

  1. 替换错误的重复判断:遍历已经录入的前i个姓名(第i位是当前正在输入的,0到i-1是已录入的),逐一对比是否重复。
  2. 统一Scanner输入方法:全程使用nextLine()读取输入,避免缓冲区问题。
  3. 调整循环逻辑:检测到重复或空输入时提示用户重新输入;输入有效时才退出循环并存入数组。

修复后的完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 17:20:36