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

Java姓名输入程序问题:无法按指定条件终止的修复请求

修复全名输入程序的终止与验证逻辑

你的代码目前存在几个核心问题,导致无法正确触发终止条件:

  • 没有区分有效姓名和无效输入,不管输入是否符合要求,都直接让计数器i递增并存入数组,无效输入也占用了10个名额的位置
  • 循环条件只判断了i<10,完全没处理用户输入fim且有效姓名≥5个时的终止逻辑
  • 输入fim时没有先检查有效姓名数量是否达标,还错误地把fim也存进了姓名数组里

下面是修复后的完整代码,我会在后面解释关键改进点:

import java.util.Scanner;

public class FullNameInput {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Enter up to 10 full names with up to 120 characters and at least two names with at least 4 characters: ");
        System.out.println("(Enter 'fim' to stop early once you've entered at least 5 valid names)");
        
        String[] validFullNames = new String[10];
        int validCount = 0; // 单独统计有效姓名的数量
        
        while (validCount < 10) {
            String input = keyboard.nextLine().trim();
            
            // 处理终止条件:输入fim且有效姓名≥5
            if (input.equalsIgnoreCase("fim")) {
                if (validCount >= 5) {
                    System.out.println("Program terminated early by user.");
                    break;
                } else {
                    System.out.println("You need at least 5 valid names to terminate early.");
                    continue;
                }
            }
            
            // 验证姓名有效性
            boolean isValid = false;
            if (input.length() <= 120) {
                String[] separatedNames = input.split("\\s+"); // 用\\s+处理多个空格的情况
                int longNameCount = 0;
                for (String part : separatedNames) {
                    if (part.length() >= 4) {
                        longNameCount++;
                    }
                }
                if (longNameCount >= 2) {
                    isValid = true;
                }
            }
            
            if (isValid) {
                validFullNames[validCount] = input;
                validCount++;
                System.out.println("Added valid name (" + validCount + "/10)");
            } else {
                System.out.println("'" + input + "' is an invalid name. Please try again.");
            }
        }
        
        // 循环结束后输出结果(可选)
        System.out.println("\nFinal list of valid names:");
        for (int i = 0; i < validCount; i++) {
            System.out.println((i+1) + ". " + validFullNames[i]);
        }
        
        keyboard.close();
    }
}

关键改进说明:

  • 单独统计有效姓名:用validCount变量专门记录符合要求的姓名数量,无效输入不会占用数组位置,也不会影响终止条件的判断
  • 正确处理fim终止逻辑:先判断输入是否为fim,再检查当前有效姓名是否≥5,达标才终止,不达标则提示用户继续输入
  • 优化验证逻辑:
    • 使用trim()处理输入前后的空格,避免空输入干扰
    • 用\\s+作为分隔符,支持姓名中间有多个空格的情况
    • 先判断总长度≤120,再统计长度≥4的子姓名数量,逻辑更清晰
  • 自动终止条件:当validCount达到10时,循环自动结束,符合需求

这样你的程序就能完全满足需求:最多存储10个有效姓名,满5个后输入fim可提前终止,满10个自动终止,同时严格验证每个输入的有效性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:59:31